这里有一个例子。
class Factory {
Queue<Object> queue = new LinkedBlockingQueue<Object>();
public Object consume() {
queue.take();
}
public void produce() {
for (int i = 0; i < 2; i++) {
queue.put(new Object());
}
}
}
例如,我有两个线程都调用consume()方法。它们正在等待生产者将某些内容放入队列中。我的问题是,在put()操作之后是否会发生take()操作,或者可能会连续发生两个put()操作,然后等待的线程才会返回?
谢谢。
BlockingQueue
是一个接口。在任何情况下,不要假设线程的顺序。最有可能的是take()
会在put()
之后发生 - 但也有可能被put()
唤醒的线程会被其他的put()
先抢先一步。 - Boris the Spider