Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.Condition;
- import java.util.concurrent.locks.ReentrantLock;
- public class Czytelnia
- {
- static int liczba_czyt=0;
- static int liczba_pisz=0;
- final ReentrantLock lock = new ReentrantLock();
- final Condition czytelnik = lock.newCondition();
- final Condition pisarz = lock.newCondition();
- Czytelnia()
- {
- this.liczba_czyt = this.liczba_pisz=0;
- }
- public void chce_czytac()
- {
- lock.lock();
- if(liczba_pisz>0 || lock.hasWaiters(pisarz))
- {
- try {
- czytelnik.await();
- } catch (InterruptedException e) {
- // TODO Automatycznie generowany blok catch
- e.printStackTrace();
- }
- }
- liczba_czyt++;
- czytelnik.signal();
- lock.unlock();
- }
- public void chce_pisac()
- {
- lock.lock();
- if(liczba_czyt+liczba_pisz >0)
- {
- try {
- pisarz.await();
- } catch (InterruptedException e) {
- // TODO Automatycznie generowany blok catch
- e.printStackTrace();
- }
- }
- liczba_pisz++;
- lock.unlock();
- }
- public void koniec_czytania()
- { lock.lock();
- liczba_czyt--;
- if(liczba_czyt== 0)
- {
- pisarz.signal();
- }
- lock.unlock();
- }
- public void koniec_pisania()
- { lock.lock();
- liczba_pisz--;
- if(lock.hasWaiters(czytelnik))
- {
- czytelnik.signal();
- }
- else
- {
- pisarz.signal();
- }
- lock.unlock();
- }
- public static void main(String[] args)
- {
- Czytelnia czytelnia = new Czytelnia();
- for (int i = 0; i <10000000 ; i++)
- {
- if((i+1 )% 10 == 0)
- {
- new pisarz(czytelnia).start();
- }
- else
- new czytelnik(czytelnia).start();
- } }
- }
- public class pisarz extends Thread {
- private static int idCounter = 0;
- private int id;
- private Czytelnia czytelnia;
- public pisarz(Czytelnia czytelnia) {
- this.czytelnia = czytelnia;
- this.id = pisarz.idCounter++;
- }
- @Override
- public void run() {
- System.out.println("Pisarz (ID:" + id + ") czeka.");
- czytelnia.chce_pisac();
- System.out.println("\tPisarz (ID:" + id + ") pisze.");
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- // TODO
- }
- System.out.println("\t\tPisarz (ID:" + id + ") wychodzi.");
- czytelnia.koniec_pisania();
- }
- }
- public class czytelnik extends Thread {
- private static int idCounter = 0;
- private int id;
- private Czytelnia czytelnia;
- public czytelnik(Czytelnia czytelnia) {
- this.czytelnia = czytelnia;
- this.id = czytelnik.idCounter++;
- }
- @Override
- public void run() {
- System.out.println("Czytelnik (ID:" + id + ") czeka.");
- czytelnia.chce_czytac();
- System.out.println("\tCzytelnik (ID:" + id + ") czyta.");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- // TODO
- }
- System.out.println("\t\tCzytelnik (ID:" + id + ") wychodzi.");
- czytelnia.koniec_czytania();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement