java 多线程 — 小车过隧道

本文介绍了Java多线程的概念和实现方式,包括继承Thread类和实现Runnable接口。通过分析小车过隧道的问题,阐述了线程间的互斥和通信,展示了如何设计代码来控制车辆安全通过隧道。文章最后给出了具体的代码实现和参考链接。
摘要由CSDN通过智能技术生成

周四的时候老师讲了java多线程,留了作业题,以这道作业题为基础, 小结多线程,也参考了很多网友的博客,参考链接见下文。可能有不对的地方,欢迎指错O(∩_∩)O~~

线程,进程基本概念

    • 进程是静态的 是一个镜像,线程是动态的 一个程序在运行的时候会先开辟线程然后执行里面的方法 开辟更多的新线程 ,而进程则是操作系统用来给用户进行展现程序运行的一种机制。
    • 所以说在实际开发中不管是java还是其他语言 都是只存在线程的。

实现多线程的两种方法

  • a. 让这个类继承java.lang.Thread,然后重写run方法
  • b. 让这个类实现 java.lang.Runnable接口,实现run方法
  • 注意:start(),启动该线程,使该线程开始执行,Java虚拟机调用该线程的run( )方法

Runnable和Callable

  • (1)Callable规定的方法是call(),Runnable规定的方法是run()
  • (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
  • (3)call方法可以抛出异常,run方法不可以
  • (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

小车过隧道问题

  • 有一条隧道,同时只允许一辆车通行,隧道两端各有多辆车等待通行,车辆只能等到隧道处于空闲状态时才能被运行进入隧道,一旦隧道中已有车辆则禁止其他车辆进入。
  • 分析:题目中隧道为共享变量,隧道左边的车过隧道为一个线程,右边的车过隧道为另外一个线程,一辆车进入时,另外一辆车则不能进入,对共享变量“隧道的访问具有互斥性
  • 可以这样设计代码,将Runnable对象作为某一个类的内部类,共享的数据“隧道”作为外部类的成员变量,对共享数据的操作分配给外部类的方法来完成,以此实现对操作共享数据的互斥和通信,作为内部类的Runnable来操作外部类的方法,实现对数据的操作。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值