我一直在寻找一种成功使用多线程和同步的方法。我试过使用 wait() 和 notify(),但我的线程仍然不同步。我有一个更大的项目,但简而言之,我需要它使用 setter 方法(在本例中为 thread1)运行线程预定次数,并且在每次“设置”之后,我需要使用 getter 方法(thread2)的线程运行并获取对象。我已经查看了许多其他示例,但我似乎无法解决,所以任何关于为什么这不起作用的帮助或解释将不胜感激。
这有时会起作用,当 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();
}
}