哲學家問題——CVTE

題目大意:

  • 哲學家問題咖祭,每一個都有自己的筷子,同時需要獲取別人的筷子吃飯:
    • 1.獲得筷子蔫骂,吃飯1秒么翰,然后趕緊放下筷子,思考3秒辽旋。
    • 2.否則思考浩嫌。

編碼實現(xiàn)

  • 利用靜態(tài)數(shù)組統(tǒng)一保存筷子,每個人的id和其中一個筷子綁定补胚。沒有自己的筷子固该,就不吃飯棺克,哼(¬︿??¬☆)孕荠。
  • synchroinized(class)祟昭,鎖定所有哲學家實例肛真,保證線程安全桶良。
package interview.philosopherquestion;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 哲學家問題啄糙,每一個都有自己的筷子定枷,同時需要獲取別人的筷子吃飯:
 *  1.獲得筷子偶摔,吃飯1秒金闽,然后趕緊放下筷子纯露,思考3秒。
 *  2.否則思考代芜。
 */
public class PhilosopherByMe extends Thread{
    //定義五個筷子:1表示可以使用埠褪,可以取筷子eating,0表示不可以使用,正在eating。钞速。贷掖。
    private final static int[] ticks = {1, 1, 1, 1, 1};
    private final int id;//不可變,線程安全
    private int otherId;//只會在同步塊中修改渴语,線程安全

    /**
     * 每一個哲學家對應一個筷子
     * @param id
     */
    PhilosopherByMe(int id){
        this.id = id;
    }

    public void eating(){
        //鎖住所有對象實例
        synchronized (PhilosopherByMe.class){
            if(ticks[id] == 1){
                for(int i = 0; i < 5; ++i){
                    if(i != id){
                        //可以獲得另外的筷子苹威,eating!<菪住牙甫!
                        if (ticks[i] == 1){
                            otherId = i;
                            ticks[i] = 0;
                            ticks[id] = 0;
                            //拿到銬子后,吃飯一秒调违。保持占有筷子窟哺,不能被其他sb拿走
                            System.out.println("哲學家" + id + "正在拿著" + id + " 和 " + otherId +" 號筷子吃飯!<技纭脏答!");
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //吃完飯,溜了溜了亩鬼。
                            return;
                        }
                    }
                }
            }
        }
    }

    public void thinking(){
        synchronized (PhilosopherByMe.class){
            //放下自己的筷子和其他人的筷子
            if (ticks[id] == 0 && ticks[otherId] == 0){
                ticks[id] = 1;
                ticks[otherId] = 1;
            }
        }

        //放下筷子后殖告,思考3秒
        System.out.println("哲學家" + id + "正在思考");
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        while (true){
            eating();
            thinking();
        }
    }

    public static void main(String[] args) {
        //5個哲學家,5個筷子
        ExecutorService executors = Executors.newFixedThreadPool(5);
        for(int i = 0; i < 5; ++i){
            executors.submit(new PhilosopherByMe(i));
        }
    }
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雳锋,一起剝皮案震驚了整個濱河市黄绩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玷过,老刑警劉巖爽丹,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異辛蚊,居然都是意外死亡粤蝎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門袋马,熙熙樓的掌柜王于貴愁眉苦臉地迎上來初澎,“玉大人,你說我怎么就攤上這事虑凛”纾” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵桑谍,是天一觀的道長延柠。 經(jīng)常有香客問我,道長锣披,這世上最難降的妖魔是什么贞间? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任贿条,我火速辦了婚禮,結果婚禮上增热,老公的妹妹穿的比我還像新娘整以。我一直安慰自己,他們只是感情好钓葫,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布悄蕾。 她就那樣靜靜地躺著票顾,像睡著了一般础浮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奠骄,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天豆同,我揣著相機與錄音,去河邊找鬼含鳞。 笑死影锈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蝉绷。 我是一名探鬼主播鸭廷,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼熔吗!你這毒婦竟也來了辆床?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤桅狠,失蹤者是張志新(化名)和其女友劉穎讼载,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體中跌,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡咨堤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了漩符。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片一喘。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗜暴,靈堂內(nèi)的尸體忽然破棺而出津滞,到底是詐尸還是另有隱情,我是刑警寧澤灼伤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布触徐,位于F島的核電站,受9級特大地震影響狐赡,放射性物質(zhì)發(fā)生泄漏撞鹉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸟雏。 院中可真熱鬧享郊,春花似錦、人聲如沸孝鹊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽又活。三九已至苔咪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柳骄,已是汗流浹背团赏。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耐薯,地道東北人舔清。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像曲初,于是被迫代替她去往敵國和親体谒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理臼婆,服務發(fā)現(xiàn)抒痒,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法目锭,類相關的語法评汰,內(nèi)部類的語法,繼承相關的語法痢虹,異常的語法被去,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 在上篇中惨缆,我們已經(jīng)討論過如何去實現(xiàn)一個 Map 了,并且也討論了諸多優(yōu)化點丰捷。在下篇中坯墨,我們將繼續(xù)討論如何實現(xiàn)一個線...
    一縷殤流化隱半邊冰霜閱讀 7,617評論 5 41
  • 撥云逐日見蒼天,斗破蒼穹博紅顏病往。 地高云繞難撫地捣染,喜迎友來斷琴弦。
    又見你笑閱讀 157評論 0 0
  • “輪指”是震音奏法通俗形象說法蕾各。震音即同一音(不一定是一個音)的急速反復扒磁。“輪指”的種類很多式曲,我們主要介紹常見的四...
    吉他范兒閱讀 1,621評論 0 1