Это проблема, о которой я всегда слышал в школе, но у меня никогда не было причин возиться, пока меня не попросили пройти собеседование.
Подсказка: Используя 2 потока, выведите "Thread i: The number is 'j'"
в порядке, где j = 1: 100, а i - номер потока. Нить 1 может печатать только нечетные j, а нить 2 может печатать только четные j.
РЕДАКТИРОВАТЬ выход j должен быть заказан
Это была моя попытка, но я не пошел дальше в процессе собеседования. Есть ли какая-то фундаментальная часть, по которой я скучаю? Есть ли оптимизации?
import java.util.concurrent.Semaphore;
public class ThreadSynchronization implements Runnable {
private int start;
private Semaphore semaphore;
private ThreadSynchronization(int start, Semaphore semaphore) {
this.start = start;
this.semaphore = semaphore;
}
public static void main(String[] args) {
Semaphore semaphore = new Semaphore(1, true);
semaphore.acquireUninterruptibly();
start(1, semaphore);
start(2, semaphore);
semaphore.release();
}
private static void start(int start, Semaphore semaphore) {
ThreadSynchronization ts = new ThreadSynchronization(start, semaphore);
Thread thread = new Thread(ts);
thread.start();
while (thread.getState() != Thread.State.WAITING) ;
}
@Override
public void run() {
for (int i = start; i <= 100; i += 2) {
semaphore.acquireUninterruptibly();
System.out.println("Thread " + start + ": The number is '" + i + "'");
semaphore.release();
}
}
}