成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【全棧之路】JAVA基礎(chǔ)課程五_哲學家就餐問題(20190614v1.2)

JerryZou / 1837人閱讀

摘要:歡迎進入基礎(chǔ)課程博客地址本系列文章將主要針對一些基礎(chǔ)知識點進行講解,為平時歸納所總結(jié),不管是剛接觸開發(fā)菜鳥還是業(yè)界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加。

歡迎進入JAVA基礎(chǔ)課程

博客地址:https://blog.csdn.net/houjiyu...
本系列文章將主要針對JAVA一些基礎(chǔ)知識點進行講解,為平時歸納所總結(jié),不管是剛接觸JAVA開發(fā)菜鳥還是業(yè)界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加QQ:243042162。

寄語:
你失落過嗎?你緊張過嗎?你憧憬過嗎?無論生活瑣事中還是繁忙的工作中,我想大部分人會遇到類似的情況,無形中壓力、失落、失望像座大山一樣頂在自己的胸口闖不過起來。于是,你開始憧憬,開始幻想,要我是換個方式結(jié)局可能就不一樣了。殊不知,人生沒有如果!調(diào)整好心態(tài),未雨綢繆,天道酬勤!
生產(chǎn)者消費者問題

1. 背景

有五個哲學家,他們的生活方式是交替地進行思考和進餐,哲學家們共用一張圓桌,分別坐在周圍的五張椅子上,在圓桌上有五個碗和五支筷子,平時哲學家進行思考,饑餓時便試圖取其左、右最靠近他的筷子,只有在他拿到兩支筷子時才能進餐,進餐完畢,放下筷子又繼續(xù)思考。

2. 代碼實現(xiàn)

//定義哲學家類,每個哲學家相當于一個線程
class Philosopher extends Thread{
    private String name;
    private Fork fork;
    public Philosopher(String name,Fork fork){
        super(name);
        this.name=name;
        this.fork=fork;
    }
    public void run(){//每個哲學家的動作,思考-》拿起筷子-》吃-》放下筷子
        while (true){
            thinking();
            fork.takeFork();
            eating();
            fork.putFork();
        }
    }

    //模擬思考
    public void thinking(){
        System.out.println("我在思考:"+name);
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    //模擬吃放
    public void eating(){
        System.out.println("我在吃:"+name);
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


class Fork{
    //5雙筷子,初始未未使用
    private  boolean[] used={false,false,false,false,false};

    //拿起筷子
    public synchronized void takeFork(){
        String name=Thread.currentThread().getName();
        int i=Integer.parseInt(name);
        while (used[i]||used[(i+1)%5]){//左右手有一只被使用則等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        used[i]=true;
        used[(i+1)%5]=true;
    }

    //釋放筷子
    public  synchronized void putFork(){
        String name=Thread.currentThread().getName();

        int i=Integer.parseInt(name);
        used[i]=false;
        used[(i+1)%5]=false;
        notifyAll();
    }


}

public class PhilosopherMain {
    public static void main(String[] args) {
        Fork fork=new Fork();
        new Philosopher("0",fork).start();
        new Philosopher("1",fork).start();
        new Philosopher("2",fork).start();
        new Philosopher("3",fork).start();
        new Philosopher("4",fork).start();
    }
}

輸出結(jié)果

我在思考:0
我在思考:1
我在思考:2
我在思考:3
我在思考:4
我在吃:0
我在吃:2
我在思考:0
我在吃:4
我在思考:2
我在吃:1
我在思考:4
我在吃:3
我在思考:1
我在吃:0
我在思考:3
我在吃:2
我在思考:0
我在吃:4
我在思考:2
我在吃:1
我在思考:4
我在吃:3
我在思考:1
我在吃:0
我在思考:3
我在吃:2
我在思考:0
我在吃:4
我在思考:2

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104700.html

相關(guān)文章

  • 全棧之路JAVA基礎(chǔ)課程_學家就餐問題20190614v1.2

    摘要:歡迎進入基礎(chǔ)課程博客地址本系列文章將主要針對一些基礎(chǔ)知識點進行講解,為平時歸納所總結(jié),不管是剛接觸開發(fā)菜鳥還是業(yè)界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加。 歡迎進入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進行講解,為平時歸納所總結(jié),不管是剛接觸JAVA開發(fā)菜鳥還是業(yè)界...

    Mr_houzi 評論0 收藏0
  • 全棧之路JAVA基礎(chǔ)課程_生產(chǎn)者消費者問題20190614v1.1)

    摘要:寄語天眼之父南仁東,心無旁騖,為崇山峻嶺間的中國天眼燃盡生命,看似一口大鍋,天眼是世界上最大最靈敏的單口徑射電望遠鏡,可以接受百億光年外的電磁信號。南仁東總工程師執(zhí)著追求科學夢想的精神,將激勵一代又一代科技工作者繼續(xù)奮斗,勇攀世界科技高峰。 歡迎進入JAVA基礎(chǔ)課程 博客地址:https://segmentfault.com/a/11...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進行...

    lemon 評論0 收藏0
  • 全棧之路JAVA基礎(chǔ)課程_生產(chǎn)者消費者問題20190614v1.1)

    摘要:寄語天眼之父南仁東,心無旁騖,為崇山峻嶺間的中國天眼燃盡生命,看似一口大鍋,天眼是世界上最大最靈敏的單口徑射電望遠鏡,可以接受百億光年外的電磁信號。南仁東總工程師執(zhí)著追求科學夢想的精神,將激勵一代又一代科技工作者繼續(xù)奮斗,勇攀世界科技高峰。 歡迎進入JAVA基礎(chǔ)課程 博客地址:https://segmentfault.com/a/11...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進行...

    everfight 評論0 收藏0
  • 全棧之路JAVA基礎(chǔ)課程_多線程和死鎖(20190614v1.0)

    摘要:一個進程可以有多個線程。線程又叫做輕量級進程。這樣兩個進程相互無休止地等待下去,均無法繼續(xù)執(zhí)行,此時兩個進程陷入死鎖狀態(tài)。不剝奪條件進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能由獲得該資源的進程自己來釋放只能是主動釋放。 歡迎進入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進...

    Allen 評論0 收藏0
  • 全棧之路JAVA基礎(chǔ)課程_多線程和死鎖(20190614v1.0)

    摘要:一個進程可以有多個線程。線程又叫做輕量級進程。這樣兩個進程相互無休止地等待下去,均無法繼續(xù)執(zhí)行,此時兩個進程陷入死鎖狀態(tài)。不剝奪條件進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能由獲得該資源的進程自己來釋放只能是主動釋放。 歡迎進入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進...

    warnerwu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<