Untitled
unknown
plain_text
a month ago
2.5 kB
4
Indexable
/** * Clasa principal pentru gestionarea accesului la resurse in centrul de lectura * Implementeaza algoritmul de sincronizare pentru accesul scriitorilor si cititorilor */ package mediateca; public class CentruLectura { private int vizitatori = 0; private boolean autorOcupat = false; private int volumeDisponibile = 0; /** * Permite unui cititor sa intre in centrul de lectura * @param cod - codul unic al cititorului */ public synchronized void intrareVizitator(String cod) throws InterruptedException { while(autorOcupat) { wait(); } vizitatori++; System.out.println("Vizitator " + cod + " a intrat in centrul de lectura."); } /** * Inregistreaza iesirea unui cititor din centrul de lectura * @param cod - codul unic al cititorului */ public synchronized void iesireVizitator(String cod) { vizitatori--; System.out.println("Vizitator " + cod + " a iesit din centrul de lectura."); notifyAll(); } /** * Permite unui autor sa intre in centrul de lectura * doar daca nu este nimeni altcineva inauntru * @param cod - codul unic al autorului */ public synchronized void intrareAutor(String cod) throws InterruptedException { while(autorOcupat || vizitatori > 0) { wait(); } autorOcupat = true; System.out.println("Autor " + cod + " a intrat in centrul de lectura."); } /** * Inregistreaza iesirea unui autor din centrul de lectura * @param cod - codul unic al autorului */ public synchronized void iesireAutor(String cod) { autorOcupat = false; System.out.println("Autor " + cod + " a iesit din centrul de lectura."); notifyAll(); } /** * Inregistreaza un volum nou creat de catre un autor * @param cod - codul unic al autorului */ public synchronized void publicaVolum(String cod) { volumeDisponibile++; System.out.println("Autor " + cod + " a publicat volumul " + volumeDisponibile + ". Total volume disponibile: " + volumeDisponibile); notifyAll(); } /** * Returneaza numarul total de volume disponibile in centrul de lectura * @return numarul total de volume */ public synchronized int getVolumeDisponibile() { return volumeDisponibile; } }
Editor is loading...
Leave a Comment