Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Модификатор volatile / 4 сообщений из 4, страница 1 из 1
02.09.2007, 23:01:40
    #34770515
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификатор volatile
Добрый вечер всем.
Позвольте еще уточнить такой вопрос.
Правильно ли я понимаю назначение модификатора volatile , предположим есть некий класс, объект которого выполняется в многопоточном контексте:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public   class  Test {

      volatile   int  counter;


      public   void  foo() {
             int  a = counter;        // (1)

            ///... промежуточные действия метода, не изменяющие поле counter
           
             int  b = counter;        // (2)
     }
}

то если потоки изменяют поле counter, то во время выполнения метода foo можно получить в разных его местах разные значения переменной counter. Если бы переменная counter не была бы volatile, то на время выполнения метода foo она бы оставалась неизменной (тоесть бралась из кеша)
?
...
Рейтинг: 0 / 0
02.09.2007, 23:03:28
    #34770516
unicornmirage
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификатор volatile
unicornmirageто если потоки изменяют поле counter, то во время выполнения метода foo можно получить в разных его местах разные значения переменной counter.

в разных местах - имеется ввиду точки (1) и (2) в коде.
...
Рейтинг: 0 / 0
02.09.2007, 23:29:13
    #34770525
четай jsr 133
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификатор volatile
unicornmirageЕсли бы переменная counter не была бы volatile, то никаких гарантий нет .
...
Рейтинг: 0 / 0
03.09.2007, 11:18:50
    #34771040
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модификатор volatile
unicornmirage unicornmirageто если потоки изменяют поле counter, то во время выполнения метода foo можно получить в разных его местах разные значения переменной counter.

в разных местах - имеется ввиду точки (1) и (2) в коде.
Если не объявлять volatile, то можно получить старое (кешированное) значение, даже несмотря на то что в промежуток между (1) и (2) оно изменилось.
Внятный пример см в доке
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Модификатор volatile / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]