gpt4 book ai didi

Java多线程处理一个字段

转载 作者:行者123 更新时间:2023-12-02 07:24:16 24 4
gpt4 key购买 nike

嗨,我有以下代码:

public Item get(int id)
{
Item i = null;
for(Worker w : workers)
{
w.get(id, i); // Several threads start reading that item from data sources
}
while(i == null) // Loop until item is found
{
// this.pause(); there should be a pause but it's not a thread, so I can't do it.
}
return i;
}

我认为应该有一个更好的方法,没有那个空循环。

涉及暂停 get 函数并仅在其中一名工作人员通知时恢复。

最佳答案

您可以使用BlockingQueue这里。您创建队列的实例。并将其传递给所有 worker 。当工作人员找到项目时 - 它将其添加到队列中。你只需等待队列不为空即可:

public Item get(int id) {
BlockingQueue<Item> queue = new ArrayBlockingQueue<Item>(1);
for(Worker w : workers) {
w.get(id, queue); // Several threads start reading that item from data sources
}
return queue.take();
}

在工作人员中使用queue.offer(foundItem);,以便他们仅在队列为空时添加项目。

关于Java多线程处理一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13763313/

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