Я работаю над вопросом ниже:
В процессе есть три темы.Первая нить печатает 1 1 1 ..., вторая печатает 2 2 2 ..., а третья печатает 3 3 3 ... бесконечно.Как вы планируете эти три потока для печати 1 2 3 1 2 3 ...
Я пришел с кодом ниже, который печатает 1 2 1 2 1 2
с использованием двух потоков, но я не могу понять,условие о том, как напечатать номер 3
здесь из третьего потока.
public class PrintOneTwoThree {
private static boolean isFirst = true;
private static final Object lock = new Object();
public static void main(String[] args) {
// first thread
new Thread(() -> {
try {
synchronized (lock) {
for (;;) {
while (!isFirst) {
lock.wait();
}
System.out.print("1 ");
isFirst = false;
lock.notify();
}
}
} catch (InterruptedException ignored) {
}
}).start();
// second thread
new Thread(() -> {
try {
synchronized (lock) {
for (;;) {
while (isFirst) {
lock.wait();
}
System.out.print("2 ");
isFirst = true;
lock.notify();
}
}
} catch (InterruptedException ignored) {
}
}).start();
}
}
Как эффективно решить этот вид проблемы?