Nie miałem problemu z rozwiązaniem poprawnym, natomiast nie mogę sobie poradzić z zagłodzeniem pisarzy i czytelników.

Wymyśliłem coś takiego:

Pocżatek w obu przypadkach ten sam:

private boolean chcePisac = true;
private boolean chceCzytac = false;
private int iluCzyta = 0;
private int iluPisze = 0;

Zagłodznie czytelników (za wiki: "Czytelnicy nie mają obowiązku czekania na otrzymanie dostępu do zasobu, jeśli w danym momencie nie otrzymał go pisarz"):

public synchronized void rozpocznijCzytanie() throws InterruptedException{
            chceCzytac = true;
            iluCzyta++;
            notifyAll();
    }

    public synchronized void zakonczCzytanie() throws InterruptedException{
            chceCzytac = false;
            iluCzyta--;
            if(iluCzyta == 0)
               notifyAll();
    }

    public synchronized void rozpocznijPisanie() throws InterruptedException{
                chcePisac = true;
                while(iluCzyta + iluPisze > 0)
                      wait();
                iluPisze++;
    }

    public synchronized void zakonczPisanie() throws InterruptedException{
            chcePisac = false;
            iluPisze--;
            if(chceCzytac)
               notifyAll();
    }

Zagłodzeni pisarze: (za wiki: "Czytelnicy nie mogą otrzymać dostępu do zasobu, jeżeli oczekuje na niego pisarz")

public synchronized void rozpocznijCzytanie() throws InterruptedException{
            chceCzytac = true;
            while(chcePisac)
                  wait();
            iluCzyta++;
            notifyAll();
    }

    public synchronized void zakonczCzytanie() throws InterruptedException{
            chceCzytac = false;
            iluCzyta--;
            if(iluCzyta == 0)
               notifyAll();
    }

    public synchronized void rozpocznijPisanie() throws InterruptedException{
                chcePisac = true;
                while(iluCzyta + iluPisze > 0)
                      wait();
                iluPisze++;
    }

    public synchronized void zakonczPisanie() throws InterruptedException{
            chcePisac = false;
            iluPisze--;
            if(chceCzytac)
               notifyAll();
    }

I tu moje pytanie : czy to jest poprawne rozwiązanie? Proszę o podpowiedzi