zoukankan      html  css  js  c++  java
  • Java哲学家进餐

    某次操作系统实验存档。

    这个哲学家除了吃就是睡。。

    哲学家.java:

    package operating.entity.philosophyeating;
    
    import operating.method.Semaphore;
    
    import java.util.Date;
    
    public class Philosophy implements Runnable {
        /**
         * 统计哲学家数量
         */
        private static int total = 0;
        /**
         * 哲学家的 id
         */
        private int id;
        private Semaphore leftChopsticks;
        private Semaphore rightChopsticks;
        /**
         * 记住睡眠时间
         */
        private Long sleepTime;
    
        public Philosophy(Semaphore leftChopsticks, Semaphore rightChopsticks) {
            id = total++;
            sleepTime = new Date().getTime();
            this.leftChopsticks = leftChopsticks;
            this.rightChopsticks = rightChopsticks;
        }
    
        @Override
        public void run() {
            while(true) {
                if(id % 2 == 0) {
                    leftChopsticks.p();
                    rightChopsticks.p();
    
                    System.out.println("number " + id + " philosophy is eating, yummy..." + "睡眠 " + endSleep() + "秒。");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    beginSleep();
    
                    rightChopsticks.v();
                    leftChopsticks.v();
                } else {
                    rightChopsticks.p();
                    leftChopsticks.p();
    
                    System.out.println("number " + id + " philosophy is eating, yummy..." + "睡眠 " + endSleep() + "秒。");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    beginSleep();
    
                    leftChopsticks.v();
                    rightChopsticks.v();
                }
            }
        }
    
        /**
         * 开始睡眠
         */
        public void beginSleep() {
            sleepTime = new Date().getTime();
        }
    
        /**
         * 结束睡眠,返回睡眠时间,单位是秒。
         * @return
         */
        public Long endSleep() {
            return (new Date().getTime() - sleepTime)/1000;
        }
    }

    测试.java:

    package operating.test;
    
    import operating.entity.philosophyeating.Philosophy;
    import operating.method.Semaphore;
    
    public class PhilosophyTest {
        public static void main(String[] args) {
            // 创建六支筷子
            Semaphore[] chopsticks = new Semaphore[6];
            for (int i = 0; i != 6; ++i) {
                chopsticks[i] = new Semaphore(1);
            }
    
            // 创建六个哲学家
            for (int i = 0; i != 6; ++i) {
                if (i == 5) {
                    new Thread(new Philosophy(chopsticks[i], chopsticks[0])).start();
                } else {
                    new Thread(new Philosophy(chopsticks[i], chopsticks[i+1])).start();
                }
            }
        }
    }

    /

    Semaphore.java

  • 相关阅读:
    iOS微信支付
    iOS登录及token的业务逻辑(没怎么用过,看各种文章总结)
    IOS 支付宝支付开发流程
    iOS SDWebImage实现原理
    站立会议1
    作业六:团队项目——编写项目的Spec
    作业5
    站立会议8
    站立会议 3
    站立会议 2
  • 原文地址:https://www.cnblogs.com/xkxf/p/7890760.html
Copyright © 2011-2022 走看看