Czytelnicy i pisarze

0

Mam taki problem do rozwiązania (bez priorytetów, może być dowolna ilość czytelników i dowlona ilość pisarzy). Moim wspólnym zasobem jest plik. Czytalnicy czytaja z pliku (liczbe) a pisarze pisza do pliku (liczbe). Jednak cos jest zle, bo w pliku mam jakies dziwne znaki a czytelnik wyswietlajac liczbe przeczytana wyswietla: "Czytelnik, liczba:" i nic nie ma po "liczba" :( Mam to zrobic na monitorach. Oto kod czytelni :

class Czytelnia{
 
    private boolean ktosPisze= false;
    private boolean chcePisac = true;
    private boolean chceCzytac = false;
    private int iluCzyta = 0;
 
    public synchronized void startCzytanie() throws InterruptedException{
           chceCzytac = true;
           while((ktosPisze) || (!chcePisac))
                 wait ();
           iluCzyta++;
           notifyAll();
 
    }
 
    public synchronized void stopCzytanie() throws InterruptedException{
           chceCzytac = false;
           iluCzyta--;
           if (iluCzyta == 0)
               notifyAll();
    }
 
    public synchronized void startPisanie() throws InterruptedException{
            chcePisac = true;
            while((iluCzyta > 0) || (ktosPisze == true))
                 wait();
           ktosPisze = true;
    }
 
    public synchronized void stopPisanie() throws InterruptedException{
           chcePisac = false;
           ktosPisze = false;
           if(!chceCzytac)
           {
            ktosPisze = true;
            chcePisac = true;
           }
           else
              notifyAll();
 
    }
 
}

No i mam klasy Czytajacy oraz Piszacy, gdzie kazdy z nich ma pole Czytelnia i w metodzie run odpowiednio dla kazdej klas otwieram czytam/pisze do pliku i zamykam plik no i wywoluje metody z Czytelni odpowiednie. HELP!

0

nie masz synchronizacji miedzy czytelnikami a pisarzami, trzeba zatrzymywać/wznawiać wątki na rzecz obiektów pisarza i czytelnika (proponuje utworzyc 2 obiekty)
Obiect pisarz, czytelnik na rzecz których wywolujesz wait() i notify()

1 użytkowników online, w tym zalogowanych: 0, gości: 1