get
второго потока увидит новое значение, если операция put
первого потока завершена. В противном случае он увидит старое значение.
Обратите внимание, что "завершено" не является четко определенным понятием в этом контексте. Операция может считаться завершенной до того, как вызов put
вернется.
Но вы можете полагаться на две вещи:
- Второй поток не увидит ссылку на мусор. Это всегда будет ссылка на действительный объект.
- Второй поток 1 сможет увидеть все записи, сделанные для объекта, выполненного первым потоком до того, как он вызвал
put
.
Последнее гарантируется моделью памяти Java как следствие произойдет до , о котором говорит Javadoc.
1 - Предполагается, что в промежуточном интервале между put
первого потока и вторым потоком, обращающимся к объекту, возвращаемому get
.
, нет никаких других обновлений объекта.