Advertisement
Guest User

Untitled

a guest
Jan 16th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. class Feast { private static final int numberOfPhilosophers = 5; private static final Random random = new Random(); private static final Semaphore doorman = new Semaphore(4, true); private static final Stick[] sticks = new Stick[5]; public static void main(String[] args) { for (int i = 0; i < 5; i++) sticks[i] = new Stick(); Philosopher[] philosophers = new Philosopher[numberOfPhilosophers]; for (int i = 0; i < 5; i++) { philosophers[i] = new Philosopher(i); philosophers[i].start(); } } static class Philosopher extends Thread { private final Stick left, right; Philosopher(int number) { super("Philosopher" + number); right = sticks[number]; left = sticks[(number + 1) % numberOfPhilosophers]; } void meditate() throws InterruptedException { System.out.println(getName() + " is meditating"); sleep(random.nextInt(10000)); System.out.println(getName() + " has finished meditating"); eat(); } void eat() throws InterruptedException { doorman.acquire(); left.take(); right.take(); System.out.println(getName() + " is eating"); sleep(random.nextInt(10000)); left.release(); right.release(); doorman.release(); meditate(); } @Override public void run() { try { meditate(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
  2.  
  3. import java.util.concurrent.Semaphore; class Stick { private final Semaphore available = new Semaphore(1); void take() throws InterruptedException { available.acquire(); } void release() { available.release(); } }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement