Я видел сообщение о многопоточности, в которой используется переменная для имитации семафоров для достижения попеременного вывода из двух потоков.
Есть ли в приведенном ниже коде проблемы с потокобезопасностью?
public class Signal {
private static volatile int signal = 0;
static class ThreadA implements Runnable {
@Override
public void run() {
while (signal < 5) {
if (signal % 2 == 0) {
System.out.println("threadA: " + signal);
signal++;
}
}
}
}
static class ThreadB implements Runnable {
@Override
public void run() {
while (signal < 5) {
if (signal % 2 == 1) {
System.out.println("threadB: " + signal);
signal = signal + 1;
}
}
}
}
public static void main(String[] args) throws InterruptedException {
new Thread(new ThreadA()).start();
Thread.sleep(1000);
new Thread(new ThreadB()).start();
}
}
// output example:
threadA: 0
threadB: 1
threadA: 2
threadB: 3
threadA: 4
Подробнее здесь: https://stackoverflow.com/questions/790 ... -this-demo