Скажем, у вас есть этот код:Java Concurrency spec?: Является ли обновление для поля внутри синхронизированного блока видимым для всех потоков?
private Object lockObject = new Object();
private Integer myValue = new Integer(0);
public void update(){
synchronized(lockObject){
System.out.println(myValue);
myValue++;
}
}
Теперь myValue
не является ни synchronized
на ни он ознаменовал volatile
. Однако единственный способ его мутации - использовать метод update()
. DZone's refcard на ядре Java-параллелизма говорит, что обновления для полей в синхронизированном блоке видны всеми потоками. Я был не уверен, что это означает только синхронизированный объект (lockObject) или любое поле (например myValue).
Может ли кто-нибудь уточнить это? Благодаря!
Итак, если у меня есть другой поток, читающий 'myValue', но он не синхронизируется с' lockObject', то это _possible_, он не увидит обновление? –
@exabrial: Это мое понимание, да. –
Удивительный, спасибо! I <3 AtomticInteger :) Я просто использовал «++» здесь как простой пример –