2014-10-09 9 views
0

От Java Параллелизм на практикеФункционирование летучего переменной против экземпляра переменной

Темы разделяют адресное пространство памяти их владеющего процессом, все потоки внутри процесса имеют доступ к тем же переменным & выделяют объекты из той же кучи.

Также

Объявление переменного в качестве летучих средств, что потоки не должны кэшировать таких переменные или другие слова, не должен доверять значениям этих переменных, если только они не будут непосредственно считывать из основной памяти ,

Мой вопрос

Say есть энергонезависимая переменная экземпляра «а», который модифицирован потоком. Не будет ли измененное значение «a» обновляться в куче. Если он обновляется в куче, другой поток, считывающий эту переменную экземпляра, автоматически считывает обновленное значение, поскольку потоки совместно используют переменные экземпляра из кучи. Итак, как меняется функционирование изменчивой переменной?

ответ

3

Разница заключается в том, что переменная volatile равна , вынуждаемая должна быть очищена от всех кешей перед чтением, и все чтения поступает из основной памяти.

Переменная переменная может быть кэширована столько раз, сколько требуется во всех потоках.

По существу

  • Каждый раз, когда вы чтенияvolatile переменной имеет значение последней записи в него из любой нити.

  • Каждый раз, когда вы чтенияnon-volatile переменная имеет значение последней записи в него из это нить и только может иметь значение, что другие потоки написали.

В конкретном случае, является наиболее распространенной причиной проблем, вполне возможно один поток, чтобы написать значение переменной и второй поток никогда видит новое значение.

+0

То же самое происходит при чтении кеширования даже переменных экземпляра? – underdog

+1

@underdog - они ** могут ** - им на самом деле не нужно, и часто они этого не делают, но критическая точка заключается в том, что вы не можете предполагать в любом случае. – OldCurmudgeon

+0

@OldCurmudgeon вы можете объяснить «им на самом деле не нужно»? – Prakash

Смежные вопросы