Untitled
unknown
plain_text
7 months ago
2.5 kB
5
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