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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

简单来看Lock更符合面向对象的编程思想,也就是将锁封装成对象,因为对于锁的各种操作(持有锁,释放锁等),都应该是锁这个事物最清楚,就好像开门这个动作时门最清楚应该定义在门类中一样。
同时使用原始的wait,notify机制时,我们不能确定notify唤醒的线程是哪一个或者说是哪一类,例如在生产者,消费者的问题中,如果存在多个生产者,多个消费者,那么使用wait,notify机制就会导致生产多个消费一个,或者生产一个却消费了多次的情况发生,究其原因就是多线程的随机性,也就是说当一个生产者线程结束时,我们无法保证唤醒的是一个消费者,如果唤醒了错误的线程,那么之后就会发生错误。
而是用Lock机制就可以很简单的解决这个问题,首先定义一个锁,在这个锁上我们上两个锁孔(也就是Condition对象),生产者对应一个锁孔A,消费者对应锁孔B,当生产者运行时,它总是将自己冻结在锁孔A上,而唤醒一个锁孔B上的线程,那么这个被唤醒的线程肯定是消费者,反之亦然。
这就很方便简单的解决了多个生产者消费者中出现的问题。:victory::victory:

1 个回复

正序浏览
欢迎来指教的大神们啊。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马