等待唤醒机制
等待唤醒机制
wait():等待-----让线程进入线程池
notify():唤醒---
notifyAll():唤醒线程池中的全部
以上都是object中的方法,所以异常只能try,不能throw
都使用在同步中,必须标示他所操作的线程所持有的锁。
wait(),notify(),notifyAll()都使用在同步中,
--因为要对持有监视器(锁)的线程进行操作,所以要使用在同步中,因为只有同步才具有锁。
为什么这些操作线程的方法要定义在wait(),notify(),notifyAll()object类中呢?
--因为这些方法在操作同步线程时,都必须要标示他们所操作线程持有的锁。
只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程唤醒。
也就是说,等待和唤醒必须是同一个锁。而锁可以是任意对象,
所以可以被任意对象调用的方法定义在object中。
为什么定义notifyAll()?
--因为需要唤醒对方线程,只用notify,容易出现只唤醒本方线程的情况,导致程序中的所有线程都等待。
同步锁:lock
Lock代替了同步方法或同步代码块,lock替换synchronized
Condition代替了同步监视器的功能;
Condition对象通过Lock对象的newCondition()方法创建;
condition对象的await(),signal(),signalAll()
替换Object对象的wait(),notify(),notifyAll()
方法包括:
await(): 等价于同步监听器的wait()方法;
signal(): 等价于同步监听器的notify()方法;
signalAll(): 等价于同步监听器的notifyAll()方法;
lock的方法lock和unlock
释放锁的动作一定要执行finally{lock.unlock()}
|
|