Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.concurrent.Semaphore;
- public class DiningPhilosophers {
- static Fork[] forks = new Fork[6];
- static Philosopher[] philosophers = new Philosopher[6];
- public static void main(String[] args) {
- for(int i = 0; i < 6; i++) {
- forks[i] = new Fork();
- }
- for(int i = 0; i < 6; i++) {
- philosophers[i] = new Philosopher("P" + i, forks[i], forks[(i + 1) % 6]);
- }
- for(int i = 0; i < 6; i++) {
- philosophers[i].start();
- }
- for(int i = 0; i < 6; i++) {
- try {
- philosophers[i].join();
- }
- catch(InterruptedException e) {
- }
- }
- }
- static class Fork {
- Semaphore fork_semaphore = new Semaphore(1);
- void take_fork() {
- try {
- fork_semaphore.acquire();
- }
- catch (InterruptedException e) {
- }
- }
- void put_back_fork() {
- fork_semaphore.release();
- }
- }
- static class Philosopher extends Thread {
- String name;
- Fork left_fork;
- Fork right_fork;
- Philosopher(String _name, Fork _left, Fork _right) {
- name = _name;
- left_fork = _left;
- right_fork = _right;
- }
- @Override
- public void run() {
- left_fork.take_fork();
- right_fork.take_fork();
- eat();
- left_fork.put_back_fork();
- right_fork.put_back_fork();
- think();
- }
- void eat() {
- System.out.println(name + " is eating!");
- try {
- Thread.sleep(100);
- }
- catch (InterruptedException e) {
- }
- }
- void think() {
- System.out.println(name + " is thinking!");
- }
- }
- }
- /// 1 2 3 4 5 6
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement