线程间通信方式

说到线程之间通信方式:主要是有两种吧1.是通过共享变量,线程之间通过该变量进行协作通信。2.通过队列(本质上也是线程间共享同一块内存)来实现消费者和生产者的模式来进行通信。

1.       通过线程之间共享变量的方式

这个就有必要说下wait(),notify(),以及notifyAll() 这三个方法。这三个方法都是属于Object的方法;所以所有类都可以继承这三方法;wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。notify()方法会唤醒一个等待当前对象的锁的线程。而notifyAll()顾名思义;就是唤醒所有在等待中的方法。wait()和notify()方法要求在调用时线程已经获得了对象的锁,因此对这两个方法的调用需要放在synchronized方法或synchronized块中。

lock、读写锁、volatile、信号量

2.       通过队列来实现线程的通信

这里用的是java.util.concurrent包中linkedBlockingQueue 来进行线程间交互。LinkedBlockingQueue 内部以一个链式结构(链接节点)对其元素进行存储。如果需要的话,这一链式结构可以选择一个上限。如果没有定义上限,将使用 Integer.MAX_VALUE 作为上限。LinkedBlockingQueue 内部以 FIFO(先进先出)的顺序对元素进行存储。队列中的头元素在所有元素之中是放入时间最久的那个,而尾元素则是最短的那个。

这里通过共享一个队列的信息,实现生产者和消费者。(关于生产者消费者又可以说一大堆)。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值