Advertisement
CSenshi

OOP - Salobie (Mzareuli)

Jul 2nd, 2019
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.48 KB | None | 0 0
  1. package f2015.ex4;
  2.  
  3. import java.util.concurrent.locks.Lock;
  4. import java.util.concurrent.locks.ReentrantLock;
  5.  
  6. class Mzareuli extends Thread {
  7.     private int capacity;
  8.     private Salobie salobie;
  9.     int curCap;
  10.     ReentrantLock lock;
  11.     ReentrantLock intLock;
  12.  
  13.     Mzareuli(int cap, Salobie s) {
  14.         capacity = cap;
  15.         salobie = s;
  16.         curCap = 0;
  17.         lock = new ReentrantLock();
  18.         intLock = new ReentrantLock();
  19.     }
  20.  
  21.     // 1. თუკი გაქვს ადგილი და შეკვეთა არის მაშინ აიღე ის შემომავალი სინიდან
  22.     // 2. გააკეთე ლობიო
  23.     public void run() {
  24.         while (true) {
  25.             try {
  26.                 Salobie.condLock.lock();
  27.                 intLock.lock();
  28.  
  29.                 while (curCap >= capacity || salobie.in.size() == 0) {
  30.                     Salobie.condLock.unlock();
  31.                     intLock.unlock();
  32.  
  33.                     salobie.in.wait();
  34.  
  35.                     intLock.lock();
  36.                     Salobie.condLock.lock();
  37.                 }
  38.             } catch (InterruptedException e) {
  39.                 e.printStackTrace();
  40.             }
  41.  
  42.             Lobio l = (Lobio) salobie.in.remove(0);
  43.  
  44.             intLock.unlock();
  45.             Salobie.condLock.unlock();
  46.  
  47.             l.cookMe(this);
  48.             intLock.lock();
  49.             curCap++;
  50.             intLock.unlock();
  51.         }
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement