生产者消费者问题的理解

来源:7-6 用wait/notify实现

bxljjy

2019-10-05

老师,你好,在生产者和消费者问题中,我们有两个线程(生产者线程和消费者线程),生产者在执行put方法时,由于put()方法和take()方法被synchronize关键字修饰,所以在put()方法被执行时,take()方法没有执行,此时只有生产者线程在执行,结合您在面试题中的问题:
为什么wait必须在同步代码块中使用?如果put()方法和take()方法没有被synchronize关键字修饰,那么两个线程可能同时执行,但对于synchronize关键字它能够保证在同一时刻最多只有一个线程执行该段代码,在生产者和消费者问题中,它有两个线程,是否可以两个线程在同一时刻,执行不同代码。望老师解惑,指出其中理解的错误。

写回答

1回答

悟空

2019-10-05

同学你好,你说“如果put()方法和take()方法没有被synchronize关键字修饰,那么两个线程可能同时执行”,但是由于在执行wait方法时,必须先拿到对应的锁,所以这里的synchronized关键字是需要加的,否则会抛出异常。不知道我理解对你的疑问了吗?

0
2
悟空
回复
bxljjy
这个要看这两段不同的代码是否是同一个synchronized锁,如果是同一个把锁,那么两个线程是不能同时执行的。关于synchronized关键字,我有一门免费课,对用法和原理都有讲解,欢迎学习:http://www.imooc.com/learn/1086
2019-10-06
共2条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程