Witam, mam za zadanie (semafory) stworzyć pętle 30 linii, gdzie w każdej ma się pojawić CBACBADDE. Prowadzący zajęcia powiedział, że niewiele mi brakuje do poprawnego zadania, a ja pomimo wielu prób nie potrafię go poprawnie zmodyfikować. Z góry dziękuję za pomoc.
'''
package sample;
import java.util.concurrent.Semaphore;
public final class Controller {
private static final int COUNT = 30;
private static int COUNTER = 0;
private static final int STEP = 9;
private static final Semaphore a = new Semaphore(0, true);
private static final Semaphore b = new Semaphore(0, true);
private static final Semaphore c = new Semaphore(1, true);
private static final Semaphore d = new Semaphore(0, true);
private static final Semaphore e = new Semaphore(0, true);
public static void main(String[] args) {
new A().start();
new B().start();
new C().start();
new D().start();
new E().start();
}
private static final class A extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < COUNT * 2; i++) {
a.acquire();
// b.release();
// a.acquire();
myPrint("A ");
c.release();
d.release();
}
}
catch (InterruptedException ex) {
}
}
}
private static final class B extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < COUNT * 2; i++) {
b.acquire();
myPrint("B ");
a.release();
}
}
catch (InterruptedException ex) {
}
}
}
private static final class C extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < COUNT * 2; i++) {
c.acquire();
myPrint("C ");
b.release();
}
}
catch (InterruptedException ex) {
}
}
}
private static final class D extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < COUNT * 2; i++) {
d.acquire();
c.release();
d.acquire();
myPrint("D ");
e.release();
}
}
catch (InterruptedException ex) {
}
}
}
private static final class E extends Thread {
@Override
public void run() {
try {
for (int i = 0; i < COUNT; i++) {
e.acquire();
myPrint("E ");
c.release();
}
}
catch (InterruptedException ex) {
}
}
}
private static synchronized void myPrint(String s) {
COUNTER++;
System.out.print(s);
if (COUNTER == STEP) {
COUNTER = 0;
System.out.println();
}
}
}
'''java