A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JJJD 中级黑马   /  2015-6-23 23:52  /  186 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

等待唤醒机制

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马