请稍等 ...
×

采纳答案成功!

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

多线程无法唤醒特定的线程吗?

老师好,我目前只看到章节7-6,看了老师介绍的notify和notifyAll得知这两种方法都无法唤醒特定的线程。所以我想问问,就没有任何方式唤醒特定的线程吗。
提出这个问题,源于我自己思考的两个实例。想咨询一下老师对于解决这两个实例的方法和思路。
第一个实例是关于老师对于生产者和消费的改编版。这里假设有一个生产者和多个消费者,假设生产者生产出一批产品后,就需要notifyAll唤醒所有消费者,然后自己休眠。每个消费者被唤醒后就领取一个产品就进行休眠,只有当所有消费者都各自领取到一个产品之后,才会唤醒生产者进行产品的再生产。
另外一个是我在使用java web编程时考虑的一个问题。假设有一个Java类来监测数据库的更新,当数据更新一次之后就会通知servlet里面的一个线程,然后获取更新的数据展示在页面上。假如只打开一个网页,这里刚好就和老师讲的两个线程轮换打出奇偶数一样,java类线程监测数据更新通知servlet进行数据更新循环往复,比较简单。但是当打开多个网页的时候,实际就会变成一个检测数据库更新的线程1,和多个servlet里面的线程组2,需要线程组1和线程组2进行轮换工作。
所以,从这两个实例中总结出来我想问的问题:假设有n组线程组,每个线程组里面的线程个数不定,只有当一个线程组里面所有的线程都运行过之后,才会让出资源让另外的一个线程组进行工作。情况如下图:
图片描述
希望能够得到老师的解答!

正在回答

1回答

悟空 2019-10-22 17:07:35

这种情况,可以用CyclicBarrier、CountDownLatch等线程协作工具类实现这个目标,就是专门用来做类似的事情用的。

0 回复 有任何疑惑可以回复我~
  • 提问者 向远之航 #1
    请问老师课程里面有讲到那个内容吗?有的话大概在哪个位置呢。我大致看了一下课程目录,标题里面没有看到那两个关键字。
    回复 有任何疑惑可以回复我~ 2019-10-22 17:31:53
  • 悟空 回复 提问者 向远之航 #2
    这部分内容将在下门实战课里推出,目前正在录制中。你可以先看一下CyclicBarrier用法,比较简单的,一学就会。
    回复 有任何疑惑可以回复我~ 2019-10-22 17:48:45
  • 提问者 向远之航 回复 悟空 #3
    好的,谢谢解答!
    回复 有任何疑惑可以回复我~ 2019-10-22 18:21:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信