黑马程序员——Java多线程线程间通信之Lock的应用
2015-07-24 11:03
573 查看
------- <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监视器的基础上改进的程序代码,使输出结果更直观
![](https://oscdn.geek-share.com/Uploads/Images/Content/202005/10/256ef6a8457d94434d369c347e3511f8)
下面是其输出结果的部分截图,可以看到存和取的一致性
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监视器的基础上改进的程序代码,使输出结果更直观
下面是其输出结果的部分截图,可以看到存和取的一致性
相关文章推荐
- 面试宝典之SVM
- java应届生面试考点收集
- 展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告
- 黑马程序员——Java基础-面向对象
- Let’s Rock & Roll ——程序员的音乐节 有同行的吗
- 程序员的作息时间表
- Mac OS X 程序员利器 – Homebrew安装与使用
- 面试题 收集请求k千里马
- 百度面试题-求1到n个数的排序
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- 黑马程序员——Java基础——Map集合的学习
- 黑马程序员--基础整理02
- 黑马程序员——学习一维数组的地址
- 黑马程序员——String类和基本数据类型对象包装类
- 【黑马程序员】-----java基础----IO
- 身为java程序员你需要知道的网站(包含书籍,面试题,架构...)
- 黑马程序员_OC Foundation框架简介
- 黑马程序员——JAVA基础------集合框架(四)----Map集合
- 如何面试一个Android开发者
- 码农《二》