Я искал способ использования нескольких потоков и синхронизации. Я пробовал использовать wait() и notify(), но мои потоки по-прежнему не синхронизируются. У меня есть большой проект, но в двух словах мне нужно, чтобы он запускал поток с помощью метода setter (thread1 в этом случае) предопределенное количество раз и после каждого «набора» мне нужен поток с методом getter (thread2)) для запуска и получения объекта. Я рассмотрел многие другие примеры, но я не могу понять, как это работает, поэтому любая помощь или объяснение того, почему это не работает, будет оценена по достоинству.Синхронизированные потоки в 1 классе
Это работает иногда, когда 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();
}
}
Какова цель метода getList() '? Вы не используете его. – bsiamionau
Не изобретайте велосипед. Используйте ['BlockingQueue'] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html) –
@ bmorris591 Но что, если я хочу квадратное колесо;) –