複数のスレッドと同期を正常に使用する方法を探していました。wait() と notify() を使用してみましたが、スレッドはまだ同期しません。私はより大きなプロジェクトを持っていますが、一言で言えば、セッターメソッド(この場合はスレッド1)でスレッドを所定の回数実行する必要があり、各「セット」の後にゲッターメソッド(スレッド2)でスレッドが必要です実行してオブジェクトを取得します。他の多くの例を見てきましたが、解決できないようです。なぜこれが機能しないのかについての助けや説明をいただければ幸いです。
これは、thread1 が最初に実行されるときに機能する場合もありますが、thread2 が最初に実行される場合もあるため、同期は機能しません。
ありがとう。
import java.util.ArrayList;
public class ThreadTest{
private ArrayList<Object> myList;
public ThreadTest(){
myList = new ArrayList<Object>();
Thread thread1 = new Thread(){
public void run(){
for(int i = 0; i < 10; i++){
addToList("" + i);
}
}
};
Thread thread2 = new Thread(){
public void run(){
for(int i = 0; i < 10; i++){
System.out.print(myList.get(i) + " ");
}
}
};
thread1.start();
thread2.start();
}
public synchronized void addToList(String a){
myList.add(a);
notify();
}
public synchronized ArrayList<Object> getList(){
try{
wait();
}
catch (InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
return myList;
}
public static void main(String[] args){
new ThreadTest();
}
}