Всем доброго дня, прошу прощения за столь, возможно, глупый вопрос. Изучаю тему потоков и в ходе экспериментов выяснил, что при указании метода как synchronized все равно выводится неверный результат. Если же добавить модификатор static к методу, то все работает так, как надо. Но у человека в примере, курс которого изучаю, все работает и без static. В чем моя ошибка?
Вот код класса и метода:
public class Traning {
public static void main(String[] args) throws InterruptedException {
MyThread myT1 = new MyThread();
MyThread myT2 = new MyThread();
myT1.start();
myT2.start();
myT1.join();
myT2.join();
System.out.println(MyThread.a);
}
}
class MyThread extends Thread {
static int a = 0;
public void run() {
for (int i = 0; i < 1000; i++) {
incrementA();
}
System.out.println("myT is ended");
}
// Если в данный метод добавить static, то все работает.
synchronized void incrementA() {
MyThread.a++;
}
}