詳細(xì)介紹什么是線程

一. 快速認(rèn)識(shí)線程
在我們?nèi)粘V?當(dāng)討論到并行時(shí),其實(shí)是指很多的程序任務(wù)在同時(shí)的運(yùn)行.如當(dāng)你在看一部電影的時(shí)候,還能打開扣扣和你心愛的女朋友談情說(shuō)愛聊著騷.在單CPU中,其實(shí)是不能同時(shí)運(yùn)行的,在多核CPU中是可以并行的.

二. 線程的介紹
在計(jì)算機(jī)中,一個(gè)程序任務(wù)就是一個(gè)進(jìn)程,進(jìn)程之間是獨(dú)立的,每個(gè)進(jìn)程均運(yùn)行在其專用且受保護(hù)的內(nèi)存空間內(nèi).而每一個(gè)進(jìn)程里面都至少有一個(gè)線程在運(yùn)行,線程是進(jìn)程的基本執(zhí)行單元,有時(shí)候一個(gè)線程也稱為輕量級(jí)的進(jìn)程.

三. 一個(gè)簡(jiǎn)單的線程例子

public class thread1 {
    public static void main(String[] args) {
       browseNews();
       enjoyMusic();
    }

    /**
     * look at the news
     */
    private static void browseNews() {
        for (int i = 0;i<5;i++) {
            System.out.println("uh``,the good news");
            sleep(1);
        }
    }

    /**
     * listen to music
     */
    private static void enjoyMusic() {
        for (int i = 0;i<5;i++) {
            System.out.println("uh``,the nice music");
            sleep(1);
        }
    }

    /**
     * exception
     * @param seconds
     */
    private static void sleep(int seconds) {
        try {
            TimeUnit.SECONDS.sleep(seconds);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

我們寫這段代碼本來(lái)是想讓聽音樂和看新聞是同時(shí)進(jìn)行的,也就是在控制臺(tái)交替輸出,然而并不是這樣的,因?yàn)槲以趂or循環(huán)里加了條件,所以控制臺(tái)的輸出是一直在輸出看新聞,然后聽音樂,如果我沒有限制條件,則會(huì)一直輸出看新聞,聽音樂的任務(wù)永遠(yuǎn)都得不到執(zhí)行.控制臺(tái)輸出如下:


第一個(gè)線程輸出結(jié)果

四. 如何讓其并發(fā)運(yùn)行交替輸出
借助Thread,并且我還用了java1.8里面的lambda表達(dá)式,代碼如下:

public static void main(String[] args) {
        new Thread(thread1::browseNews).start();
       enjoyMusic();
    }

控制臺(tái)輸出如下:


Thread

其完整寫法為:

public static void main(String[] args) {
        new Thread(){
            @Override
            public void run() {
                browseNews();
            }
        }.start();
       enjoyMusic();
    }

上面代碼的意思是我們創(chuàng)建了一個(gè)線程,重寫了其run方法,并將browseNews()看新聞交給它執(zhí)行;然后調(diào)用start()方法,啟動(dòng)一個(gè)新的線程.

五. 線程的生命周期

  1. NEW 新建 用關(guān)鍵字new創(chuàng)建一個(gè)Thread對(duì)象,代表線程的狀態(tài)為new狀態(tài),此時(shí)它不能運(yùn)行,因?yàn)椴]有啟動(dòng),和其他Java對(duì)象一樣,new狀態(tài)可以通過start方法進(jìn)入runnable狀態(tài).
  2. RUNNABLE 就緒 調(diào)用start方法進(jìn)入runnable,此時(shí)線程在JVM真正的創(chuàng)建,但是線程一經(jīng)啟動(dòng)并不會(huì)直接運(yùn)行,這還要取決于CPU的調(diào)度,這個(gè)中間狀態(tài)我們稱為可執(zhí)行狀態(tài),它具備了執(zhí)行的的資格,聽候CPU的調(diào)度.
  3. RUNNING 運(yùn)行 線程獲得CPU資源,開始執(zhí)行任務(wù)(run()方法),當(dāng)使用完系統(tǒng)分配的時(shí)間后挪蹭,系統(tǒng)就會(huì)剝脫該線程占用的CPU資源呈础,讓其他線程獲得執(zhí)行的機(jī)會(huì).此時(shí)除非此線程自動(dòng)放棄CPU資源或者有優(yōu)先級(jí)更高的線程進(jìn)入霍弹,線程將一直運(yùn)行到結(jié)束


    注意
  4. BLOCKED 阻塞 線程讓出CPU并暫停自己的執(zhí)行,即進(jìn)入堵塞狀態(tài).上圖中已經(jīng)介紹了什么情況下會(huì)進(jìn)入阻塞狀態(tài)了
    bolcked狀態(tài)的線程可以轉(zhuǎn)換為以下的狀態(tài):


    image.png
  5. TERMINATED 死亡(DEAD)此狀態(tài)說(shuō)明線程的聲明周期結(jié)束,將不會(huì)再切換到任何狀態(tài),線程將不再擁有運(yùn)行的資格

持續(xù)更新........

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碘箍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迟几,老刑警劉巖呆贿,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚷兔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡榨崩,警方通過查閱死者的電腦和手機(jī)谴垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)母蛛,“玉大人翩剪,你說(shuō)我怎么就攤上這事〔式迹” “怎么了前弯?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵蚪缀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我恕出,道長(zhǎng)询枚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任浙巫,我火速辦了婚禮金蜀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘的畴。我一直安慰自己渊抄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布丧裁。 她就那樣靜靜地躺著护桦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪煎娇。 梳的紋絲不亂的頭發(fā)上二庵,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音缓呛,去河邊找鬼催享。 笑死,一個(gè)胖子當(dāng)著我的面吹牛强经,可吹牛的內(nèi)容都是我干的睡陪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼匿情,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兰迫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起炬称,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤汁果,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后玲躯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體据德,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年跷车,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棘利。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朽缴,死狀恐怖善玫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情密强,我是刑警寧澤茅郎,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布蜗元,位于F島的核電站,受9級(jí)特大地震影響系冗,放射性物質(zhì)發(fā)生泄漏奕扣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一掌敬、第九天 我趴在偏房一處隱蔽的房頂上張望惯豆。 院中可真熱鬧,春花似錦奔害、人聲如沸循帐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至离斩,卻和暖如春银舱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跛梗。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工寻馏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人核偿。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓诚欠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親漾岳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轰绵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345