黑马程序员——Java多线程线程间通信之Lock的应用

来源:互联网 发布:php 获取端口号 编辑:程序博客网 时间:2024/04/28 02:50

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

Lock锁的应用

       Java的线程间通信就是多个线程在操作同一资源,但操作的动作不同。譬如有一个商店,我们可以去里面买东西,但同时商店也在不断的进货才能保证有东西来卖给我们,商店就相当于要操作的资源,商店卖东西和进货就相当于两个不同的操作。

       Java多线程间有等待唤醒机制,wait(),notify(),notifyAll(),分别是等待,唤醒,唤醒所有,他们都使用在同步中,因为要对持有监视器的线程进行操作,所以在使用同步中,因为只有同步才具有锁。wait(),释放执行权,释放锁;notify(),释放执行权,不释放锁。

       JDK1.5以后将同步和锁封装成了对象,将操作锁的隐式方法变成了显示操作

       Lock接口代替了同步代码块或同步函数,将同步的隐式锁操作变成了显示操作,同时为了更灵活的应用,可以对一个锁加上多组监视器,原来在Sychronized中只有一组(wait,notify,notifyAll)方法

      lock()方法获取锁,unlock()方法释放锁,释放的动作要放在finally中,因为必须要完成释放的动作

     Condition接口代替了Object中的wait(),notify(),notifyAll()三个方法,并提供了await(),signal(),signalAll()方法,将这些监视器的方法进行了单独的封装,变成了Condition监视器对象,可以和任意锁进行组合。

    下面展示的是在Java API文档中给出的演示Condition监视器的基础上改进的程序代码,使输出结果更直观



下面是其输出结果的部分截图,可以看到存和取的一致性


0 0
原创粉丝点击