当前位置: 首页 > 面试题库 >

Java:Java 如何实现多线程之间的通讯和协作?

卓云
2023-04-24

可以通过中断 和 共享变量的方式实现线程间的通讯和协作

比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。这种互相通信的过程就是线程间的协作。

Java中线程通信协作的最常见的两种方式:

1、syncrhoized加锁的线程的Object类的wait()/notify()/notifyAll()

2、ReentrantLock类加锁的线程的Condition类的await()/signal()/signalAll()

线程间直接的数据交换:

通过管道进行线程间通信:1)字节流;2)字符流

 类似资料:
  • 创建一个阻塞队列来容纳任务,在第一次执行任务时创建足够多的线程,并处理任务,之后每个工作线程自动从任务队列中获取线程,直到任务队列中任务为0为止,此时线程处于等待状态,一旦有工作任务加入任务队列中,即刻唤醒工作线程进行处理,实现线程的可复用性。 线程池一般包括四个基本组成部分: (1)线程池管理器 用于创建线程池,销毁线程池,添加新任务。 (2)工作线程 线程池中线程,可循环执行任务,在没有任务时

  • 线程间通讯接口 模块   信号量   信号量接口     互斥量   互斥量接口     事件   事件接口     邮箱   邮箱接口     消息队列   消息队列接口     信号   信号接口   结构体 struct   rt_ipc_object   IPC基类控制块 更多...   宏定义 #define  RT_IPC_FLAG_FIFO   0x00   先进先出模式   #de

  • 问题内容: 我正在尝试为某些python脚本构建Web界面。问题是我必须使用PHP(而不是CGI),并且我执行的某些脚本需要花费一些时间才能完成:5-10分钟。PHP是否可以与脚本进行通信并显示某种进度状态?这应该允许用户在任务运行时使用网页,并在此期间显示某些状态,或者在完成时仅显示一条消息。 当前使用exec()并在完成时处理输出。该服务器正在Windows计算机上运行,​​因此pcntl_f

  • 本文向大家介绍Android后台线程和UI线程通讯实例,包括了Android后台线程和UI线程通讯实例的使用技巧和注意事项,需要的朋友参考一下 本节向你展示如何在任务中发送数据给UI线程里的对象,这个特性允许你在后台线程工作,完了在UI线程展示结果。 在UI线程定义一个Handler Handler是Android系统线程管理框架里的一部分。一个Handler对象接收消息,并且运行代码来处理消息。

  • 本文向大家介绍c# 如何实现不同进程之间的通信,包括了c# 如何实现不同进程之间的通信的使用技巧和注意事项,需要的朋友参考一下   进程之间的通信是为了解决不同进程之间的数据传输问题,这样可以让不同程序交互数据。实现进程通信的方式:1、剪切板;2、COM;3、内存映射文件;4、WCF 1、剪切板Clipboard在进程间传送对象   剪切板是一个供应用程序使用的公有区域。在.NET中定一个了一个D

  • 本文向大家介绍Python多线程编程(八):使用Event实现线程间通信,包括了Python多线程编程(八):使用Event实现线程间通信的使用技巧和注意事项,需要的朋友参考一下 使用threading.Event可以实现线程间相互通信,之前的Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]我们已经初步实现了线程间通信的基本功能,但是更为通用的一种做法