Senior
Tutaq ki, iki iplik var. Birincisi (1,2,3...) çıxarır, ikincisi (A,B,C...) çıxarır. Onların ardıcıllıqla (1,A,2,B...) işləməsini necə təmin edə bilərsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Чтобы обеспечить чередование вывода потоков (1, A, 2, B, ...), нужно синхронизировать их работу, заставляя каждый поток ждать, пока другой не выведет свой элемент. В Java это можно сделать с помощью объекта-монитора и методов wait()/notify().
Пример реализации:
public class AlternatingPrinter {
private final Object lock = new Object();
private boolean numberTurn = true;
public static void main(String[] args) {
AlternatingPrinter printer = new AlternatingPrinter();
Thread numberThread = new Thread(printer::printNumbers);
Thread letterThread = new Thread(printer::printLetters);
numberThread.start();
letterThread.start();
}
public void printNumbers() {
for (int i = 1; i <= 26; i++) {
synchronized (lock) {
while (!numberTurn) {
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print(i + " ");
numberTurn = false;
lock.notify();
}
}
}
public void printLetters() {
for (char c = 'A'; c <= 'Z'; c++) {
synchronized (lock) {
while (numberTurn) {
try {
lock.wait();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.print(c + " ");
numberTurn = true;
lock.notify();
}
}
}
}
В этом коде один поток печатает число и переключает флаг, другой — букву, и так по очереди.