Я пытаюсь написать простой код, чтобы понять volatile ключевое слово в java.Ошибка volatile ключевого слова в java
Идея состоит в том, чтобы увеличить значение count Поле класса Runner с использованием двух потоков. Класс помощника реализует Runnable, где метод запуска увеличивает значение , которые оба статические и volatile.
class Helper implements Runnable{
@Override
public void run() {
for(int i=0; i<100000;i++){
Runner.count+=1;
}
}
}
public class Runner {
public static volatile long count=0; // to be incremented
public static void main(String[] args){
Thread t1 = new Thread(new Helper());
Thread t2 = new Thread(new Helper());
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Count= "+count); // output expected to be 200000
}
}
Ожидаемый результат для каждого запуска является Count = 200000, но иногда я получаю разное количество. Пожалуйста, помогите мне понять, как это возможно
Летучий обеспечивает видимость, но не атомарность (это то, что требует составная операция, такая как приращение переменной). – Kayaman