黑马程序员技术交流社区

标题: 基础知识-等待唤醒机制 [打印本页]

作者: JJJD    时间: 2015-6-23 23:52
标题: 基础知识-等待唤醒机制
等待唤醒机制

        等待唤醒机制
                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()}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2