Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.40 KB | None | 0 0
  1. package Lab3;
  2.  
  3. import java.util.*;
  4. import java.util.concurrent.Semaphore;
  5.  
  6. public class Exercise5 {
  7.  
  8.     static int waitingCustomers = 0;
  9.  
  10.     static Semaphore availableSeats = new Semaphore(5);
  11.     static Semaphore lock = new Semaphore(1);
  12.     static Semaphore work = new Semaphore(1);
  13.     static Semaphore customerHere = new Semaphore(0);
  14.  
  15.  
  16.     static class Customer extends Thread {
  17.         String ID;
  18.  
  19.         public Customer(String ID) {
  20.             this.ID = ID;
  21.         }
  22.  
  23.         void customerComesIn() throws InterruptedException {
  24.             // TODO: 3/29/20 Synchronize this method, invoked by a Customer thread
  25.             if (waitingCustomers == 5) {
  26.                 System.out.println("No free seats for customer" + ID);
  27.                 return;
  28.             }
  29.             availableSeats.acquire();
  30.             System.out.println("Customer " + ID + " coming in...");
  31.             lock.acquire();
  32.             waitingCustomers++;
  33.             lock.release();
  34.             customerHere.release();
  35.         }
  36.  
  37.         @Override
  38.         public void run() {
  39.             try {
  40.                 customerComesIn();
  41.             } catch (InterruptedException e) {
  42.                 e.printStackTrace();
  43.             }
  44.         }
  45.     }
  46.  
  47.     static class Barber extends Thread {
  48.         public Barber() {
  49.         }
  50.  
  51.         void barber() throws InterruptedException {
  52.             // TODO: 3/29/20 Synchronize this method, invoked by Barber thread
  53.             while (true) {
  54.                 customerHere.acquire();
  55.                 work.acquire();
  56.                 System.out.println("Haircut...");
  57.                 waitingCustomers--;
  58.                 work.release();
  59.                 availableSeats.release();
  60.             }
  61.         }
  62.  
  63.         @Override
  64.         public void run() {
  65.             try {
  66.                 barber();
  67.             } catch (InterruptedException e) {
  68.                 e.printStackTrace();
  69.             }
  70.         }
  71.     }
  72.  
  73.     public static void main(String[] args) {
  74.         // TODO: 3/29/20 Synchronize the scenario
  75.         Barber barber = new Barber();
  76.         HashSet<Customer> customers = new HashSet<Customer>();
  77.  
  78.         for (int i = 0; i < 20; i++) {
  79.             Customer c = new Customer(Integer.toString(i));
  80.             customers.add(c);
  81.         }
  82.  
  83.         for (Thread t : customers) {
  84.             t.start();
  85.         }
  86.  
  87.         barber.start();
  88.     }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement