【发布时间】:2014-02-04 00:54:06
【问题描述】:
这是一个例子。
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是一个interface。任何状况之下;当涉及到线程时,不要假设任何顺序。take()很可能会在put()之后发生 - 但可能会发生由put()唤醒的胎面可能会被另一个put()击败。
标签: java multithreading concurrency queue blockingqueue