请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

生产者消费者问题的理解

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

正在回答 回答被采纳积分+3

1回答

悟空 2019-10-05 12:51:28

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

0 回复 有任何疑惑可以回复我~
  • 提问者 bxljjy #1
    老师,你好,synchronize关键字的含义为:在同一时刻下最多只有一个线程执行该段代码,那么是否可以在同一时刻下有两个个线程执行两不同段代码,
    回复 有任何疑惑可以回复我~ 2019-10-06 10:47:12
  • 悟空 回复 提问者 bxljjy #2
    这个要看这两段不同的代码是否是同一个synchronized锁,如果是同一个把锁,那么两个线程是不能同时执行的。关于synchronized关键字,我有一门免费课,对用法和原理都有讲解,欢迎学习:http://www.imooc.com/learn/1086
    回复 有任何疑惑可以回复我~ 2019-10-06 16:03:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信