java - 如何知道另一个线程是否进行 SynchronousQueue 轮询?

标签 java asynchronous java.util.concurrent thread-synchronization

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

有什么简单的方法可以做到这一点吗?从我天真的阅读 javadoc 和代码的代码来看,似乎没有,但我想我会检查 SOE。

最佳答案

如果您实现了此逻辑,并且您的生产者线程每次发现有另一个线程在轮询上被阻塞时都会向队列添加值,该怎么办?如何保证您的生产者放入队列的值将被该线程而不是另一个线程消耗?

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

关于java - 如何知道另一个线程是否进行 SynchronousQueue 轮询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53802442/

相关文章:

java - 使用 Java future 进行无限操作是错误的吗?

java - java并发编程中,读取值时是否需要使用synchronized?

java - 来自内核的 GC 信号而不是固定的 JVM 堆大小

java - 如何删除要在 ConcurrentSkipListMap 中键入的元素?

java - 使用 WHERE 子句更新 JOIN 另一个表

javascript - 等待后未执行异步/等待代码

asynchronous - .net core 中的异步流下载

javascript - jQuery:保存异步调用结果以供稍后使用?

java - 是否可以在 glassfish 中以编程方式识别服务器身份验证模块的存在

Java——如何动态引用对象的属性?