Java多線程——龜兔賽跑(加強(qiáng)版)

昨天寫的龜兔賽跑中存在一些問題,今天聽老師講解后清楚了許多,但是個人感覺老師的邏輯比較復(fù)雜(可能是我想的太簡單-_-),所以把老師和自己昨天的思路整合一下力惯,重新寫了一下~

先上題目
一放棒、題目:
實(shí)現(xiàn)龜兔賽跑
提示:可以采用Math.random()取得0~1之間的隨機(jī)數(shù)模擬比賽進(jìn)程, 如總距離為100米站欺,在隨機(jī)數(shù)00.3之間代表兔子跑姨夹,每次跑2米,在0.31之間代表烏龜跑矾策,每次跑1 米磷账,先跑完100米者為勝利者
結(jié)構(gòu):
Race類:產(chǎn)生RabbitAndTurtle的兩個實(shí)例,分別代表兔子和烏龜
RabbitAndTurtle類:繼承Thread類贾虽,實(shí)現(xiàn)賽跑的邏輯

二逃糟、實(shí)現(xiàn)

Race類:這個和昨天的一樣,直接調(diào)用方法就可以了

    public class Race {
        public static void main(String[] args) {
            RabbitAndTurtle rabbit = new RabbitAndTurtle("小白兔子");
            RabbitAndTurtle turtle = new RabbitAndTurtle("烏龜");
            rabbit.start();
            turtle.start();
        }
    }

RabbitAndTurtle類

public class RabbitAndTurtle extends Thread {

    public RabbitAndTurtle(String name) {
        // TODO Auto-generated constructor stub
        super(name);
    }

    public int distance = 100;
    static boolean flag = true;
    public int predistance = 0;

    @Override
    public void run() {

        double ran = Math.random();
        String name = Thread.currentThread().getName();
        while (flag) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (name.equals("烏龜")) {
                if (Math.random() < 1) {
                    predistance += 1;
                    System.out.println(name + "我跑了:" + predistance + "米");
                    if (predistance == 100) {
                        System.out.println("=================烏龜贏了=================");
                        flag = false;
                        break;
                    }
                }
                try {
                    sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if (name.equals("小白兔子")) {
                if (Math.random() < 0.3) {
                    predistance += 2;
                    System.out.println(name + "我跑了:" + predistance + "米");
                    if (predistance == 100) {
                        System.out.println("=================小白兔子贏了=================");
                        flag = false;
                        break;
                    }
                }
            }
            try {
                sleep(200);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
}

其實(shí)變化不大 主要是加了Math.random()和sleep()兩個方法
下面說一下這兩個方法的具體作用

if (name.equals("小白兔子")) {
                if (Math.random() < 0.3) {
                    predistance += 2;
                    System.out.println(name + "我跑了:" + predistance + "米");
                    if (predistance == 100) {
                        System.out.println("=================小白兔子贏了=================");
                        flag = false;
                        break;
                    }
                }
            }

因?yàn)樾⊥米优艿谋容^快蓬豁,為了使結(jié)果更加的公平绰咽,讓贏者更隨機(jī)所以使用Math.random()方法,當(dāng)產(chǎn)生的隨機(jī)數(shù)在[0,0.3]時兔子才可以移動地粪,當(dāng)產(chǎn)生的隨機(jī)數(shù)在(0.3,1)的時候?yàn)觚斚蚯耙苿尤∧迹篂觚斚蚯暗母怕首兇螅ó?dāng)老師說到這一點(diǎn)的時候我簡直翻白眼-_-,怪不得我昨天百思不得其解這個隨機(jī)數(shù)要怎么用)sleep()方法同理,在兔子移動后可以使用sleep()讓其進(jìn)入阻塞狀態(tài)從而使烏龜線程有更大的概率獲得cpu資源

運(yùn)行結(jié)果:

這里寫圖片描述

昨天的運(yùn)行結(jié)果:


這里寫圖片描述

對比兩張圖可以看到今天的結(jié)果隨機(jī)性更強(qiáng)而且一個跑完線程就停止了另一個也不會繼續(xù)進(jìn)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蟆技,一起剝皮案震驚了整個濱河市玩敏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌质礼,老刑警劉巖旺聚,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異眶蕉,居然都是意外死亡砰粹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門造挽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碱璃,“玉大人,你說我怎么就攤上這事刽宪±逶簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵圣拄,是天一觀的道長嘴秸。 經(jīng)常有香客問我,道長庇谆,這世上最難降的妖魔是什么岳掐? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮饭耳,結(jié)果婚禮上串述,老公的妹妹穿的比我還像新娘。我一直安慰自己寞肖,他們只是感情好纲酗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布衰腌。 她就那樣靜靜地躺著,像睡著了一般觅赊。 火紅的嫁衣襯著肌膚如雪右蕊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天吮螺,我揣著相機(jī)與錄音饶囚,去河邊找鬼。 笑死鸠补,一個胖子當(dāng)著我的面吹牛萝风,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播紫岩,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼规惰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了被因?” 一聲冷哼從身側(cè)響起卿拴,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衫仑,失蹤者是張志新(化名)和其女友劉穎梨与,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體文狱,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粥鞋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞄崇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呻粹。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苏研,靈堂內(nèi)的尸體忽然破棺而出等浊,到底是詐尸還是另有隱情,我是刑警寧澤摹蘑,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布筹燕,位于F島的核電站,受9級特大地震影響衅鹿,放射性物質(zhì)發(fā)生泄漏撒踪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一大渤、第九天 我趴在偏房一處隱蔽的房頂上張望制妄。 院中可真熱鬧,春花似錦泵三、人聲如沸耕捞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俺抽。三九已至具篇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凌埂,已是汗流浹背驱显。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞳抓,地道東北人埃疫。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像孩哑,于是被迫代替她去往敵國和親栓霜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • -_- 學(xué)java快有一個月了横蜒,之前一直有記錄自己學(xué)習(xí)過程的想法胳蛮,但是太懶了所以......今天進(jìn)入線程學(xué)習(xí)的部分...
    _Lucifer丶閱讀 1,565評論 0 0
  • 方法1 (數(shù)據(jù)類型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math...
    GB_speak閱讀 40,994評論 2 6
  • 本文主要講了java中多線程的使用方法、線程同步丛晌、線程數(shù)據(jù)傳遞仅炊、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等澎蛛。 首先講...
    李欣陽閱讀 2,454評論 1 15
  • Java多線程學(xué)習(xí) [-] 一擴(kuò)展javalangThread類 二實(shí)現(xiàn)javalangRunnable接口 三T...
    影馳閱讀 2,957評論 1 18
  • 01 我現(xiàn)在單身抚垄。 每天看那么多人的故事,對我總是有影響的谋逻。 來結(jié)婚的大概分兩個年齡段:二十多歲的男人和三四十的男...
    朱子先生的攝影思維閱讀 439評論 13 17