Используя как можно меньше семафоров (мне сказали, что вы можете использовать до четырех, и это должно работать), выведите эти числа (не в одном коде): 22, 46, 36
Замена P4 и P1, P2 и P3 и т. Д. Не будет иметь никакого значения для вывода.
Я знаю, как работают семафоры, но буквально не знаю, как их синхронизировать.
Единственное, что может бытьиспользуются X.acquire ();и X.release ();
Изменение кода запрещено .
import java.util.concurrent.Semaphore;
public class Zad_EP {
private static int A = 0;
private static int B = 0;
private static int C = 3;
private static final Semaphore NONAME = new Semaphore(1, true);
public static void main(String[] args) {
new P1().start();
new P2().start();
new P3().start();
new P4().start();
}
private static final class P1 extends Thread {
@Override
public void run() {
try {
A = 10;
B = B + 5;
C = C + A;
Thread.sleep(0);
System.out.println("Thread P1 is done...");
} catch (InterruptedException ex) {
System.out.println("Ooops...");
Thread.currentThread().interrupt();
throw new RuntimeException(ex);
}
}
}
private static final class P2 extends Thread {
@Override
public void run() {
try {
B = B + C;
A = A + B;
Thread.sleep(0);
System.out.println("Thread P2 is done...");
} catch (InterruptedException ex) {
System.out.println("Ooops...");
Thread.currentThread().interrupt();
throw new RuntimeException(ex);
}
}
}
private static final class P3 extends Thread {
@Override
public void run() {
try {
C = B + 10;
A = 2 * A;
B = B + A;
Thread.sleep(0);
System.out.println("Thread P3 is done...");
} catch (InterruptedException ex) {
System.out.println("Ooops...");
Thread.currentThread().interrupt();
throw new RuntimeException(ex);
}
}
}
private static final class P4 extends Thread {
@Override
public void run() {
try {
System.out.println("Sum result: " + A + " + " + B + " + " + C + " = " + (A + B + C));
Thread.sleep(0);
System.out.println("Thread P4 is done...");
} catch (InterruptedException ex) {
System.out.println("Ooops...");
Thread.currentThread().interrupt();
throw new RuntimeException(ex);
}
}
}
}