Advertisement
Guest User

Barber

a guest
Apr 9th, 2020
513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.37 KB | None | 0 0
  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. import java.util.Random;
  4. import java.util.concurrent.Semaphore;
  5.  
  6.  
  7.  
  8. public class BarberShop {
  9.  
  10.     static int freeChairs = 5;
  11.     static Queue<Integer> waiting = new LinkedList<>();
  12.     static Semaphore chairsLock = new Semaphore(1);
  13.     static Semaphore customerReady = new Semaphore(0);
  14.     static Semaphore barberReady = new Semaphore(0);
  15.  
  16.     static class Barber extends Thread{
  17.         @Override
  18.         public void run() {
  19.             try {
  20.                 execute();
  21.             } catch (InterruptedException e) {
  22.                 e.printStackTrace();
  23.             }
  24.         }
  25.  
  26.         public void execute() throws InterruptedException {
  27.             while (true){
  28.                 while (!waiting.isEmpty()){
  29.                     chairsLock.acquire();
  30.                     freeChairs++;
  31.                     int id = waiting.poll();
  32.                     barberReady.release();
  33.                     chairsLock.release();
  34.                     System.out.println("Barber give haircut to customer "+id);
  35.                     customerReady.tryAcquire();
  36.                 }
  37.                 System.out.println("Barber goes to sleep");
  38.                 customerReady.acquire();
  39.             }
  40.         }
  41.     }
  42.  
  43.     static class Customer extends Thread{
  44.         int id;
  45.  
  46.         public Customer(int id) {
  47.             this.id = id;
  48.         }
  49.  
  50.         @Override
  51.         public void run() {
  52.             try {
  53.                 execute();
  54.             } catch (InterruptedException e) {
  55.                 e.printStackTrace();
  56.             }
  57.         }
  58.  
  59.         public void execute() throws InterruptedException {
  60.             chairsLock.acquire();
  61.             if(freeChairs>0){
  62.                 System.out.println("Customer "+id+" sits in.");
  63.                 waiting.add(this.id);
  64.                 freeChairs--;
  65.                 customerReady.release();
  66.                 chairsLock.release();
  67.                 barberReady.acquire();
  68.             }
  69.             chairsLock.release();
  70.         }
  71.     }
  72.  
  73.     public static void main(String[] args) throws InterruptedException {
  74.         // TODO: 3/29/20 Synchronize the scenario
  75.         Thread t = new Barber();
  76.         t.start();
  77.         Random random = new Random();
  78.         for (int i = 0; i < 100; i++) {
  79.             t = new Customer(i+1);
  80.             t.start();
  81.         }
  82.     }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement