以下のソースコードは、製品/消費者のパターンを実装するために使用されていますが、うまく機能せず、解決方法がわかりません。
クラス1:製品
package test;
import java.util.ArrayList;
import java.util.List;
public class Productor extends Thread {
private List list = null;
public Productor(ArrayList list) {
this.list = list;
}
public synchronized void product() throws InterruptedException {
for (int e = 0; e < 10; e++) {
System.out.println("Add-" + e + " " + System.currentTimeMillis());
list.add(e);
if (list.size() >= 10) {
wait();
} else {
notifyAll();
}
}
}
public void run() {
try {
while(true){
product();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
クラス2:消費者パッケージテスト。
import java.util.ArrayList;
import java.util.List;
public class Consumer extends Thread {
private List list = null;
public Consumer(ArrayList list) {
this.list = list;
}
public synchronized void consume() throws InterruptedException {
if (list.size() <= 0) {
wait();
} else {
notifyAll();
}
for (int e = 0; e < list.size(); e++) {
System.out.println("Remove-" + e + " "
+ System.currentTimeMillis());
list.remove(e);
}
}
public void run() {
try {
while(true){
consume();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
クラス3:製品/消費者パッケージテストのテスト。
import java.util.ArrayList;
public class TestCP {
public static void main(String args[]) throws InterruptedException {
ArrayList product = new ArrayList();
Productor pt = new Productor(product);
Consumer ct = new Consumer(product);
pt.start();
ct.start();
}
}
TestCPの出力は次のとおりです。
追加-01340777963967
追加-11340777963968
追加-21340777963968
追加-31340777963968
追加-41340777963968
追加-51340777963968
追加-61340777963968
追加-71340777963968
追加-81340777963968
追加-91340777963968
私の意図は、リストに保存されて消費者によって消費されたProductor製品の10個の要素、次にProductor製品の要素、Consumerが再び消費することです...フィードバックをいただければ幸いです。