首页 > 解决方案 > 如何知道另一个线程是否进行 SynchronousQueue 轮询?

问题描述

我有一个非常模糊的用例,但本质上我需要知道另一个线程是否执行 SynchronousQueue poll(有超时),它是否我想插入项目并取消阻止它。

有没有直接的方法可以做到这一点?从我天真的阅读 javadoc 和代码的代码来看,似乎没有,但我想我会用 SOE 进行检查。

标签: javaasynchronousjava.util.concurrentthread-synchronization

解决方案


如果您实现了这个逻辑,并且您的生产者线程每次发现有另一个线程阻塞时都会向队列添加值poll- 哪里可以保证生产者放入队列的值将由该线程而不是另一个线程消耗?

建议改变你的设计。生产者 - 向队列添加值的线程 - 应该对消费者一无所知。让你产生一个请求消费者。我的意思是定义另一个队列并使您当前的线程poll提交一个request. 您当前的生产者线程从该新队列中获取请求并满足请求。您可以将请求对象作为两个线程之间的中介来实现。


推荐阅读