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

来源:7-3 notify方法

向远之航

2019-10-22

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

写回答

1回答

悟空

2019-10-22

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

0
5
悟空
回复
JLU_LONG
如果线程比较少的情况下,那确实可以。但是如果有多个线程的话,并不确定被唤醒的是哪一个。
2019-12-18
共5条回复

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

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

2512 学习 · 939 问题

查看课程