这是示例。
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());
}
}
}
例如,我有两个线程,它们都调用 Consumer()。他们正在等待生产者将一些东西放入队列中。我的问题是,在 put() 操作之后是否会发生 take() 操作,或者是否有可能两个 put() 操作相继发生,并且只有在等待线程返回之后?
谢谢。
最佳答案
一旦 put 完成,锁就会被释放,让我们假设 put 和 take 都再次等待该锁及其非公平锁,那么任何方法 Put/Take 都可以获取锁并启动。 除非指定,否则不存在有序和交替的监视器(锁)交换。
查看java代码。
关于java - Java BlockingQueue 中的 put(s) 和 take(s),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540974/