У меня есть простой класс с связанного списка:Как поточно-безопасно манипулировать списками в Java?
private final LinkedList<Object> list;
Если у меня есть два метода манипулирования в этом списке:
public void m1(){ ... list.poll()...}
public void m2(){...list.clear)....}
Как убедиться в ThreadSafety? Достаточно ли иметь оба метода получают «синхронизированного» ключевое слово, или я должен поставить
synchronized(list){
System.out.println("locking on :" + lock);
}
вокруг метода-кода?
Здравый смысл говорит мне, что это второй, но я хотел бы подтвердить или простой способ убедиться, что мой список не запутался.
PS: Или это будет лучше размещено в CodeReview? Он чувствует себя здесь как-то здесь.
Я бы предложил использовать 'Синхронизированный' только вокруг критических разделов, таких как' poll' и 'clear', а не по всему методу. – TheLostMind
Также, как насчет методов типа 'add()' и 'remove()' ?. Вам также придется * синхронизировать * с ними? – TheLostMind
Хорошо, в первую очередь: Спасибо, все ответы были полезны :). Из-за обстоятельств «существует существующая система вокруг этого», я закончил синхронизацию блока, который имел значение. Для почти всех других случаев я хотел бы указать http://stackoverflow.com/a/27838890/2286132 by atish shimpi. @TheLostMind: вы совершенно правы, это случилось так, что случаи, с которыми я имел дело, где заглядывать, опросить и очистить, так они оказались в этом примере! – Layna