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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李平 初级黑马   /  2012-5-29 18:18  /  1499 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

线程中有synchronized和Lock两种方式,synchronized中只能用notifyAll来唤醒等待中的所有线程,而lock中可以定义多个Condition 来分别唤醒生产者或者消费者线程。这两种方式具体有什么异同?以后用的时候最好用哪个?

1 个回复

倒序浏览
老毕视频其实讲的非常多了,打个比方:生产者与消费者,老的同步代码块和同步方法,你没法由一方唤醒另一方,你只能把在等待的全部唤醒。

JDK5.0中提供了多线程升级解决方案。 显示的锁机制。 将同步synchronized替换成了lock操作
将Object中的wait,notify,notifyAll替换成了Condition对象
该对象可以通过lock锁进行获取
这样就可以实现本方法只唤醒对方的操作。
总结:5.0之后提供了显示的锁机制,以及显示的锁对象上的等待唤醒操作机制 ,同时把等待唤醒进行了封装。一个锁
可以对应多个Condition,之前一个锁对应一个wait,notify。
当你要进行线程同步并且线程通信时,建议使用显示的锁机制,新特性,人家都是升级的解决方案了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马