Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.LinkedList;
- import java.util.Queue;
- import java.util.Random;
- import java.util.concurrent.Semaphore;
- public class BarberShop {
- static int freeChairs = 5;
- static Queue<Integer> waiting = new LinkedList<>();
- static Semaphore chairsLock = new Semaphore(1);
- static Semaphore customerReady = new Semaphore(0);
- static Semaphore barberReady = new Semaphore(0);
- static class Barber extends Thread{
- @Override
- public void run() {
- try {
- execute();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- public void execute() throws InterruptedException {
- while (true){
- while (!waiting.isEmpty()){
- chairsLock.acquire();
- freeChairs++;
- int id = waiting.poll();
- barberReady.release();
- chairsLock.release();
- System.out.println("Barber give haircut to customer "+id);
- customerReady.tryAcquire();
- }
- System.out.println("Barber goes to sleep");
- customerReady.acquire();
- }
- }
- }
- static class Customer extends Thread{
- int id;
- public Customer(int id) {
- this.id = id;
- }
- @Override
- public void run() {
- try {
- execute();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- public void execute() throws InterruptedException {
- chairsLock.acquire();
- if(freeChairs>0){
- System.out.println("Customer "+id+" sits in.");
- waiting.add(this.id);
- freeChairs--;
- customerReady.release();
- chairsLock.release();
- barberReady.acquire();
- }
- chairsLock.release();
- }
- }
- public static void main(String[] args) throws InterruptedException {
- // TODO: 3/29/20 Synchronize the scenario
- Thread t = new Barber();
- t.start();
- Random random = new Random();
- for (int i = 0; i < 100; i++) {
- t = new Customer(i+1);
- t.start();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement