Найти в Дзене
DEBAGanov

Java 1093. Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?

В Java можно использовать механизмы синхронизации, такие как методы wait() и notify(), чтобы реализовать выполнение потоков в заданной последовательности. Вот пример кода, демонстрирующий это:

public class SequenceExecution {
private static final Object lock = new Object();
private static int currentThread = 1;

public static void main(String[] args) {
Thread t1 = new Thread(new Task("T1", 1));
Thread t2 = new Thread(new Task("T2", 2));
Thread t3 = new Thread(new Task("T3", 3));

t1.start();
t2.start();
t3.start();
}

static class Task implements Runnable {
private final String name;
private final int threadId;

public Task(String name, int threadId) {
this.name = name;
this.threadId = threadId;
}

@Override public void run() {
synchronized (lock) {
try {
while (threadId != currentThread) {
lock.wait();
}
System.out.println(name);
currentThread++;
lock.notifyAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

В этом примере создаются три потока: Т1, Т2 и Т3. Каждый поток выполняет свою задачу в методе run(). Перед выполнением задачи каждый поток проверяет значение переменной currentThread и ожидает, если оно не соответствует его идентификатору потока (threadId). Когда поток выполняет свою задачу, он увеличивает значение currentThread и оповещает все ожидающие потоки с помощью метода notifyAll().

Таким образом, потоки будут выполняться в последовательности Т1, Т2, Т3. Однако следует отметить, что точный порядок выполнения может зависеть от планировщика потоков операционной системы, и поэтому возможны некоторые вариации в реальном времени выполнения.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov