Рассмотрим следующий код:
Код: Выделить всё
public class Main {
public static void main(String args[]){
Thread t1 = new SimpleThread();
Thread t2 = new SimpleThread();
t1.start();
t2.start();
}
static class SimpleThread extends Thread {
private static volatile int n = 0;
public void run() {
n++;
int m = n;
System.out.println(m);
}
}
}
Я рассмотрел следующие сценарии:
- t1 и t2 выполняются полностью (не важно, в каком порядке), а не параллельно, поэтому имеем 1 2
- t1 и t2 выполняются параллельно, в обоих потоках n++ выполняется «правильно», но планировщик сначала выполняет печать для потока, который имеет m=2, поэтому у нас есть 2 1< /li>
t1 и t2 выполняются параллельно и оба считывают n=0 в инструкции n++, поэтому у нас есть 1 1
?
Подробнее здесь: https://stackoverflow.com/questions/791 ... he-program
Мобильная версия