У меня есть большой вопрос для вас.Как синхронизировать два разных метода из одного и того же класса, чтобы заблокировать один и тот же объект?Вот пример:
public class MyClass extends Thread implements Observer{
public List<AnotherClass> myList = null;
public MyClass(List<AnotherClass> myList){
this.myList = myList;
}
public void run(){
while(true){
//Do some stuff
myList.add(NotImportantElement);
}
}
public void doJob{
for(int i=0; i<myList.size; i++){
ElementClass x = myList.get(i);
//Do some more stuff
}
}
}
Вопрос в том, как я могу остановить запуск run () от доступа к myList при выполнении doJob и наоборот?
Представьте себе: я запускаю поток и начинаю добавлятьэлементы в моем списке.В случайный момент я вызываю doJob () из другого класса, который содержит ссылку на мой поток.
Как мне сделать блокировку?Спасибо!
LE
Хорошо, я понял концепцию блокировки, но теперь у меня есть другой вопрос.
Предположим, у меня есть класс с public static myList
и только один экземпляр этого класса.Из этого экземпляра я создаю n
экземпляров Thread
, которые берут каждый элемент этого списка и делают с ним что-то еще.
Теперь, в определенный момент, myList
обновляется.Что происходит с теми потоками, которые уже обрабатывали элементы myList?Как мне заблокировать доступ на myList
при его обновлении?