public class Lift {
private static int reis = 0;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread fir_lift = new Thread(new liftTask(1));
Thread sec_lift = new Thread(new liftTask(2));
fir_lift.start();
sec_lift.start();
try {
fir_lift.join();
sec_lift.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Оба лифта завершили работу. Всего рейсов: " + reis);
}
static class liftTask implements Runnable {
private final int id;
liftTask(int id) {
this.id = id;
}
@Override
public void run() {
for (int ri = 1; ri <= 5; ri++) {
for (int fl = 1; fl <= 5; fl++) {
System.out.printf("Лифт %d: этаж %d, рейс %d%n", id, fl, ri);
sleep(800);
sleep(500);
}
for (int fl = 4; fl >= 1; fl--) {
System.out.printf("Лифт %d: этаж %d, рейс %d%n", id, fl, ri);
sleep(800);
sleep(500);
}
synchronized (lock) {
reis++;
}
}
System.out.printf("Лифт завершил работу", id);
}
private void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}