0

嗨,我有以下代码:

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;
}

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

涉及暂停获取功能并仅在其中一名工人通知时恢复的事情。

4

1 回答 1

2

您可以在此处使用BlockingQueue。您创建一个队列实例。并将其传递给所有工人。当工作人员找到项目时 - 将其添加到队列中。你只需等到队列不为空:

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);,以便他们仅在队列为空时添加项目。

于 2012-12-07T12:51:00.050 回答