Cykliczne wyświetlanie sekwencji

Cykliczne wyświetlanie sekwencji
Zimbob
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tychy
  • Postów: 18
0

Dzień Dobry,

Posiadam klasę, której zadaniem jest wyświetlanie sekwencji liter "ABC" o długości zadeklarowanej w programie. Program prezentuje się następująco:

Kopiuj
import java.util.concurrent.Semaphore;

public class SemaphoresABC {

    private static final int COUNT = 10; 
    private static final int DELAY = 5; 
    
    private static final Semaphore a = new Semaphore(1, true);
    private static final Semaphore b = new Semaphore(0,true);
    private static final Semaphore c = new Semaphore(0, true);
    
    public static void main(String[] args) {
        new A().start(); 
        new B().start();
        new C().start();

    }

    private static final class A extends Thread { 

        @Override
        @SuppressWarnings("SleepWhileInLoop")
        public void run() {
            try {
                for (int i = 0; i < COUNT; i++) {
                    a.acquire();
                    System.out.print("A ");
                    b.release();
                    Thread.sleep(DELAY);
                }
            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
            System.out.println("\nThread A: I'm done...");
        }
    }

    private static final class B extends Thread {

        @Override
        @SuppressWarnings("SleepWhileInLoop")
        public void run() {
            try {
                for (int i = 0; i < COUNT; i++) {
                    b.acquire();
                    System.out.print("B ");
                    c.release();
                    Thread.sleep(DELAY);
                }
            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
            System.out.println("\nThread B: I'm done...");
        }
    }

    private static final class C extends Thread {

        @Override
        @SuppressWarnings("SleepWhileInLoop")
        public void run() {
            try {
                for (int i = 0; i < COUNT; i++) {
                    c.acquire();
                    System.out.print("C ");
                    a.release();
                    Thread.sleep(DELAY);
                }
            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
            System.out.println("\nThread C: I'm done...");
        }
    }
}

Chciałbym jednak go zmodyfikować, aby dana litera się powtarzała, przykładowo aby stworzyć sekwencję "ABCA", czy "BCAAB". Jak mogę to osiągnąć?

Pozdrawiam

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
0
Zimbob napisał(a):

Posiadam klasę, której zadaniem jest wyświetlanie sekwencji liter "ABC" o długości zadeklarowanej w programie. Program prezentuje się następująco:

...

Jak mogę to osiągnąć? >

Zapytać autora ?

ZD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2310
0
Zimbob napisał(a):

Chciałbym jednak go zmodyfikować, aby dana litera się powtarzała, przykładowo aby stworzyć sekwencję "ABCA", czy "BCAAB". Jak mogę to osiągnąć?

Autor miał może trudną, ale czytelną ideę, operując wątkami / semaformami uzyskać "pętle bez pętli" na 3 litery.

A ty jaką masz ideę na swój efekt? Bo identycznie sie nie da.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
Zimbob napisał(a):

Chciałbym jednak go zmodyfikować, aby dana litera się powtarzała, przykładowo aby stworzyć sekwencję "ABCA", czy "BCAAB". Jak mogę to osiągnąć?

Zostawić tylko jeden semafor.

W0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3760
1
Zimbob napisał(a):

Chciałbym jednak go zmodyfikować, aby dana litera się powtarzała, przykładowo aby stworzyć sekwencję "ABCA", czy "BCAAB". Jak mogę to osiągnąć?

Ogólnie to konstrukcja klas A, B, C jest zła i trzeba ją zmienić - natomiast jak, to zależy de facto od wymagań. Napisz coś więcej o tym, po co ci to.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.