Не могу понять: почему вывод вывод второй задаче именно такой? Ведь в методе run класса MakeProposal есть Thread.sleep(100), за время сна метод run класса AcceptProposal может же сработать несколько раз с одним и тем же значением proposal.
volatile public List<String> notes = new ArrayList<String>();
Если я правильно понял теорию, словом volatile мы запрещаем процессору помещать в кэш ссылку на notes, т.е. адрес ArrayList-объекта . Сами его узлы сидят вообще в других местах памяти, на них volatile тоже каким-то магическим образом распространяется или это банально ошибочная задача?
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ