Потому что он всегда печатает «3». Не требуется синхронизация? Я тестирую эту простую вещь, потому что у меня возникают проблемы с реальной проблемой с несколькими потоками, что плохо иллюстрирует проблему, потому что она большая. Это упрощенная версия, чтобы продемонстрировать ситуацию.Почему эта нить безопасна?
class Test {
public static int count = 0;
class CountThread extends Thread {
public void run()
{
count++;
}
}
public void add(){
CountThread a = new CountThread();
CountThread b = new CountThread();
CountThread c = new CountThread();
a.start();
b.start();
c.start();
try {
a.join();
b.join();
c.join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
Test test = new Test();
System.out.println("START = " + Test.count);
test.add();
System.out.println("END: Account balance = " + Test.count);
}
Положите петлю вокруг «основного» кода, и вы увидите, что это не так. – Chan