Я пытаюсь создать пример для отображения разницы между переменными и обычными переменными, такими как:
package main;
public class TestVolatile extends Thread {
public int l = 5;
public volatile int m = -1;
public TestVolatile(String str) {
super(str);
}
public void run() {
int i = 0;
while ((l > 1) && (l < 10)) {
if (m >= 0) {
m++;
}
i++;
l = 5;
System.out.println("5=" + i + " m=" + m);
}
}
public static void main(String[] args) throws InterruptedException {
TestVolatile tva = new TestVolatile("ThreadA");
tva.start();
sleep(5);
synchronized (tva) {
tva.m = 5;
tva.l = 10;
}
}
}
То есть m
является изменчивым, l
- нет. Я полагаю, что выход из цикла while зависит от значения l
.
Поскольку значение l
не является энергозависимым - m
будет увеличиваться как минимум 1 раз после присвоения l
5. Но я запускал код 10 раз и всегда m == 5.
Поэтому я полагаю, что я не прав. Как решить эту проблему? Спасибо.
Спасибо за ответы, но не все хорошо.
Я установил как:
volatile int x = 0;
volatile int y = 0;
Так что теперь переменные должны быть одинаковыми! Но это не тот случай.
x: 346946234 y: 346946250
x: 346946418 y: 346946422
x: 346946579 y: 346946582
x: 346946742 y: 346946745
x: 346946911 y: 346946912