Вот решил написать пример где два потока изменяют переменную и каждый раз в итоге разный результат, хотя вот вроде читал, что если переменная типа int то гарантируется атомарное чтение/запись и никакими мьютексами ее защищать не надо.
class Watcher implements Runnable {
public static int i=0;
public void run() {
final int NUM_ITER = 10000;
for (int z = 0; z < NUM_ITER; z++) {
i++;
}
}
}
public class Main {
public static void main(String[] args) {
Watcher watcher = new Watcher();
try {
Thread thread1 = new Thread(watcher, "thread1");
Thread thread2 = new Thread(watcher, "thread2");
thread1.start();
thread2.start();
thread2.join();
thread1.join();
System.out.println("Final result: " + Integer.toString(watcher.i));
}
catch (Exception e) {
System.out.println("Exception");
}
}
}
В общем сорян, что-то разметка разъезажется и так и так.