gpt4 book ai didi

java - 如何恢复由于 linkedBlockingQueue.take() 而处于阻塞进程的线程

转载 作者:行者123 更新时间:2023-12-02 05:12:06 25 4
gpt4 key购买 nike

我有一个生产者线程,它将不断将值插入到 linkedBlockingQueue 中,并且有多个消费者线程将同时从此 linkedBlockingQueue 中 take() 。我让他们继续思考的条件是,当我的制作人完成标志是假的,当它是真的时,他们将停止尝试。但是我遇到了我的第二个线程位于 take() block 进程中的问题。我相信这是因为在我的生产者在结束时将标志设置为 true 之前,其中一个线程已经在执行 take() 阻塞方法的 run() 主体内部。由于不会有任何新元素添加到 linkedBlockingQueue 中,因此它将处于永远阻塞的过程中。我该如何纠正这个问题?

最佳答案

解决此问题的标准方法是让生产者线程在完成时在共享队列中插入一些有毒值(您选择的一些特殊值)。您应该设置等于 numOfThreads 的有毒值数量。

在消费者线程中,每当您获取一个值时,都会检查该值是否为有毒值。如果是,您可以返回。

关于java - 如何恢复由于 linkedBlockingQueue.take() 而处于阻塞进程的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com