私は、制限された生産者と消費者の問題を解決するプログラムを書きました。構築中ArrayBlockingQueue
に容量100を定義しました。スレッド内にテイクアンドプットするメソッドを使用しています。そして、時々私はそれらの間にテイクを入れて102回置くのを見ることに気づきました。なぜそれが起こるのですか?
プロデューサー実行メソッド:
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