Если в качестве переменной присваивается самому себе, компилятор выдает предупреждение, как в следующем примере:
int x = 2;
x = x;
Это предупреждение, как правило, является признаком проблемы программирования, поэтому для себя это хорошая вещь, имейте это, но в случае, если переменная является летучей, которая будет ONLIEST Полезно Использовать случай Я могу подумать, предупреждение неверно.
int y = 0;
volatile int x = 2;
y = 3;
x = x;
Модель модели Java обеспечивает, чтобы каждый поток, считывающий x и y в этом порядке, гарантированно видел значение 3 для y. Это связано с тем, что при назначении x в одном потоке и чтении x в другом устанавливается порядок до-заказа.
Назначение не влияет на значение переменной, но оно имеет огромный эффект для параллелизма.
Обратите внимание, что в приведенном выше примере предупреждения может быть подавлены с помощью
x = x + 0;
Но там нет такого хака для ссылок. Один случай использования, который поразит вас, заключается в попытке синхронизировать содержимое int[]
. Один поток считывает элемент:
myarray[3]
и другой поток записывает элемент:
myarray[3] = 2;
Поскольку члены массива themselfes не могут быть неустойчивыми, вы должны сделать myarray
энергозависимой и добавьте следующие строки в поток записи:
myarrray = myarray;
Ну, это предупреждает вас, что в любом случае это бессмысленно, я думаю, было бы навязчивым не позволять кому-то писать что-то очевидное, это не влияет на поток ваша программа, так почему вы ожидаете ошибку компиляции? – theMarceloR
есть прецедент для этого, см. Мой ответ ниже ... – CodeFanatic
@ Андрю Мосс приятно, что вы принимаете ответ, который не отвечает на ваш вопрос, что такое прецедент ... – CodeFanatic