CSDN Java课堂随笔NO:8

 

         今天讲的依然是java线程,主要讲了线程交互的基础知识,多个线程在等待一个对象锁时候使用notifyAll(),并发协作的经典案例-生产者消费者模型和线程的调度-守护线程

     线程交互的基础知识

线程交互知识点需要从java.lang.Object的类的三个方法来学习: 

void notify() :唤醒在此对象监视器上等待的单个线程。

void notifyAll():唤醒在此对象监视器上等待的所有线程。

void wait() :导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或notifyAll() 方法。

千万注意:

当在对象上调用wait()方法时,执行该代码的线程立即放弃它在对象上的锁。然而调用notify()时,并不意味着这时线程会放弃其锁。如果线程仍然在完成同步代码,则线程在移出之前不会放弃锁。因此,只要调用notify()并不意味着这时该锁变得可用。

多个线程在等待一个对象锁时候使用notifyAll()

   在多数情况下,最好通知等待某个对象的所有线程。如果这样做,可以在对象上使用notifyAll()让所有在此对象上等待的线程重出等待区,返回到可运行状态。

并发协作的经典案例-生产者消费者模型

   对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。

实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。

对于此模型,应该明确一下几点:

1、生产者仅仅在仓储未满时候生产,仓满则停止生产。

2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。

3、当消费者发现仓储没产品可消费时候会通知生产者生产。

4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。

解决死等问题的途径:

通过某一条件来判断对象监视器是否以及执行了notifyAll()

1)如果已执行,则避免自己被监视器wait()

2)如果没执行,则可以放心大胆的去被wait(),因为迟早都会被notifyAll()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值