摘要:歡迎進入基礎課程博客地址本系列文章將主要針對一些基礎知識點進行講解,為平時歸納所總結,不管是剛接觸開發菜鳥還是業界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加。
歡迎進入JAVA基礎課程
博客地址:https://blog.csdn.net/houjiyu...
本系列文章將主要針對JAVA一些基礎知識點進行講解,為平時歸納所總結,不管是剛接觸JAVA開發菜鳥還是業界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加QQ:243042162。
寄語:生產者消費者問題
你失落過嗎?你緊張過嗎?你憧憬過嗎?無論生活瑣事中還是繁忙的工作中,我想大部分人會遇到類似的情況,無形中壓力、失落、失望像座大山一樣頂在自己的胸口闖不過起來。于是,你開始憧憬,開始幻想,要我是換個方式結局可能就不一樣了。殊不知,人生沒有如果!調整好心態,未雨綢繆,天道酬勤!
1. 背景
有五個哲學家,他們的生活方式是交替地進行思考和進餐,哲學家們共用一張圓桌,分別坐在周圍的五張椅子上,在圓桌上有五個碗和五支筷子,平時哲學家進行思考,饑餓時便試圖取其左、右最靠近他的筷子,只有在他拿到兩支筷子時才能進餐,進餐完畢,放下筷子又繼續思考。
2. 代碼實現
//定義哲學家類,每個哲學家相當于一個線程 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(); } }
輸出結果
我在思考: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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77757.html
摘要:歡迎進入基礎課程博客地址本系列文章將主要針對一些基礎知識點進行講解,為平時歸納所總結,不管是剛接觸開發菜鳥還是業界資深人士,都希望對廣大同行帶來一些幫助。若有問題請及時留言或加。 歡迎進入JAVA基礎課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎知識點進行講解,為平時歸納所總結,不管是剛接觸JAVA開發菜鳥還是業界...
摘要:寄語天眼之父南仁東,心無旁騖,為崇山峻嶺間的中國天眼燃盡生命,看似一口大鍋,天眼是世界上最大最靈敏的單口徑射電望遠鏡,可以接受百億光年外的電磁信號。南仁東總工程師執著追求科學夢想的精神,將激勵一代又一代科技工作者繼續奮斗,勇攀世界科技高峰。 歡迎進入JAVA基礎課程 博客地址:https://segmentfault.com/a/11...本系列文章將主要針對JAVA一些基礎知識點進行...
摘要:寄語天眼之父南仁東,心無旁騖,為崇山峻嶺間的中國天眼燃盡生命,看似一口大鍋,天眼是世界上最大最靈敏的單口徑射電望遠鏡,可以接受百億光年外的電磁信號。南仁東總工程師執著追求科學夢想的精神,將激勵一代又一代科技工作者繼續奮斗,勇攀世界科技高峰。 歡迎進入JAVA基礎課程 博客地址:https://segmentfault.com/a/11...本系列文章將主要針對JAVA一些基礎知識點進行...
摘要:一個進程可以有多個線程。線程又叫做輕量級進程。這樣兩個進程相互無休止地等待下去,均無法繼續執行,此時兩個進程陷入死鎖狀態。不剝奪條件進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能由獲得該資源的進程自己來釋放只能是主動釋放。 歡迎進入JAVA基礎課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎知識點進...
摘要:一個進程可以有多個線程。線程又叫做輕量級進程。這樣兩個進程相互無休止地等待下去,均無法繼續執行,此時兩個進程陷入死鎖狀態。不剝奪條件進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能由獲得該資源的進程自己來釋放只能是主動釋放。 歡迎進入JAVA基礎課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎知識點進...
閱讀 840·2021-11-15 17:58
閱讀 3640·2021-11-12 10:36
閱讀 3778·2021-09-22 16:06
閱讀 955·2021-09-10 10:50
閱讀 1324·2019-08-30 11:19
閱讀 3308·2019-08-29 16:26
閱讀 927·2019-08-29 10:55
閱讀 3340·2019-08-26 13:48