【发布时间】:2012-10-23 22:49:11
【问题描述】:
我编写了解决有界生产者和消费者问题的程序。在构造 ArrayBlockingQueue 时,我定义了容量 100。我正在使用方法 take 和 put 内部线程。而且我注意到,有时我会看到 102 次 put ,它们之间有任何 take 。为什么会这样?
生产者运行方法:
public void run() {
Object e = new Object();
while(true) {
try {
queue.put(e);
} catch (InterruptedException w) {
System.out.println("Oj, nie wyszlo, nie bij");
}
System.out.println("Element added");
}
}
消费者运行方式:
public void run() {
while(true) {
try {
queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Element removed");
}
}
uniq -c 文件的一部分,带有输出:
102 Element removed
102 Element added
102 Element removed
102 Element added
102 Element removed
102 Element added
102 Element removed
102 Element added
102 Element removed
102 Element added
102 Element removed
102 Element added
2 Element removed
2 Element added
102 Element removed
102 Element added
【问题讨论】:
标签: java concurrency java.util.concurrent capacity