Я искал способ успешно использовать несколько потоков и синхронизацию. Я пробовал использовать wait() и notify(), но мои потоки по-прежнему не синхронизируются. У меня есть более крупный проект, но в двух словах мне нужно, чтобы он запускал поток с методом установки (thread1 в этом случае) заданное количество раз, и после каждого «набора» мне нужен поток с методом получения (thread2) запустить и получить объект. Я просмотрел много других примеров, но я не могу понять это, поэтому любая помощь или объяснение того, почему это не работает, будут оценены.
Иногда это работает, когда поток 1 запускается первым, но в других случаях поток 2 запускается первым, поэтому синхронизация не работает.
Спасибо.
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();
}
}
getList()
? Вы не используете его. - person bsiamionau   schedule 10.03.2013BlockingQueue
- person Boris the Spider   schedule 10.03.2013