Java多線程-線程狀態(tài)女淑、優(yōu)先級

線程狀態(tài)

線程從開啟到結束運行瞭郑,都有它自己的狀態(tài)。Thread類中有一個枚舉類可以表示所有的狀態(tài)鸭你。我們也把它們大致分成這幾個狀態(tài):

  1. 新建屈张,線程剛new出來的時候
  2. 就緒,線程調用 start()
  3. 運行袱巨,cpu執(zhí)行線程
  4. 阻塞阁谆,運行中的線程因為某些操作中斷運行,比如調用 sleep() 方法愉老,阻塞完成后會回到就緒狀態(tài)
  5. 終止场绿,線程的 run() 方法執(zhí)行完畢

Thread的枚舉類State

  1. NEW,線程剛創(chuàng)建的狀態(tài)
  2. RUNNABLE俺夕,運行中的線程
  3. BLOCKED裳凸,線程被阻塞的狀態(tài)
  4. WAITING,等待執(zhí)行的線程
  5. TIMED WAITING劝贸,等待sleep結束的線程
  6. TERMINATED姨谷,執(zhí)行完畢的線程

停止線程

不推薦直接調用線程的 stop() 方法來停止線程。

可以自己寫一個boolean標記來完成線程的停止:

package thread.situation;

public class StopDemo implements Runnable{
    private boolean flag=true;
    private int i=0;
    @Override
    public void run()
    {
        while(flag)
        {
            System.out.println("子線程執(zhí)行中..."+i++);
        }
    }
    public void stop()
    {
        flag = false;
    }

    //主方法
    public static void main(String[] args) {
        StopDemo s = new StopDemo();
        Thread t = new Thread(s);
        t.start();
        for (int i = 0; i < 100000000 ; i++)
        {
            System.out.println("Main Thread has execute"+i);
            if(i==9000000)
            {
                s.stop();
                System.out.println("Make the subthread stop...");
            }
        }
    }
}

線程的幾種方法:

  • sleep(100) 讓線程阻塞100毫秒映九,阻塞后回到就緒狀態(tài)
  • yield() 運行中讓線程回到就緒狀態(tài)梦湘,重新等待 cpu 的調用
  • join() 讓線程插隊執(zhí)行,插隊執(zhí)行的時候其它線程都會進入阻塞狀態(tài),少用捌议。

線程優(yōu)先級

前面已經說過哼拔,調用就緒狀態(tài)的線程是由CPU內部決定的,我們干預不了瓣颅。但有時候倦逐,我們想讓某個線程優(yōu)先執(zhí)行怎么辦呢?我們可以向CPU提建議宫补,也就是設置線程的優(yōu)先級檬姥。

Thread 類中使用[1,10]來表示線程的優(yōu)先級。它還內置了3個優(yōu)先級常量:MIN_PRIORITY粉怕、NORM_PRIORITY健民、MAX_PRIORITY,實際值分別是1贫贝,5秉犹,10。

我們可以在線程 start()調用它的 setPriority(int x) 方法設置優(yōu)先級來向CPU建議最好先執(zhí)行哪個線程(當然CPU聽不聽就不知道了)稚晚。

使用 getPriority()方法可以查看當前線程的優(yōu)先級崇堵。

package thread.situation;

public class StopDemo implements Runnable{

    @Override
    public void run()
    {
        System.out.println(Thread.currentThread().getName()+"優(yōu)先級是"+Thread.currentThread().getPriority());
    }
}
class Demo{
    public static void main(String[] args) throws InterruptedException {
        StopDemo s = new StopDemo();
        Thread t1 = new Thread(s,"最好的線程");
        Thread t2 = new Thread(s,"最差的線程");
        Thread t3 = new Thread(s,"有點好的線程");
        Thread t4 = new Thread(s,"有點差的線程");
        t1.setPriority(Thread.MAX_PRIORITY);
        t2.setPriority(Thread.MIN_PRIORITY);
        t3.setPriority(8);
        t4.setPriority(3);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        System.out.println("主線程的優(yōu)先級是"+Thread.currentThread().getPriority());
    }
}

某次輸出結果:

主線程的優(yōu)先級是5
最差的線程優(yōu)先級是1
有點差的線程優(yōu)先級是3
最好的線程優(yōu)先級是10
有點好的線程優(yōu)先級是8

很明顯,CPU不太愿意接受我們的建議客燕。

守護線程

線程其實是有兩種的筑辨。一種是用戶線程,一種是守護線程(Daemon)幸逆。用戶線程就是我們創(chuàng)建出來的線程棍辕,主線程也是用戶線程的一種。守護線程主要是一些服務線程还绘,比如監(jiān)控內存楚昭、垃圾回收線程之類的。它們的區(qū)別在執(zhí)行方式上拍顷。

  • 如果是用戶線程抚太,JVM會在所有的用戶線程執(zhí)行完后關機
  • 如果是服務線程...我都這么寫了JVM會怎么對待守護線程不用我說了吧(即使有守護線程在運行,JVM還是會裝作看不到然后關機)昔案。

通過調用 Thread 類的 setDeamon() 方法并傳入一個 true 就可以把該類變成守護線程了尿贫。

package thread.situation;

public class StopDemo implements Runnable{
    @Override
    public void run(){}
}
class Man implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("你"+i+"歲了");
        }
        System.out.println("http:////// ansl \\\\\\");
    }
}
class BigBrother implements Runnable{
    @Override
    public void run() {
        while(true) {
            for (int i = 0; i < 20000; i++)
            {
                System.out.println("Big Brother has watched you"+ i +"times");
            }

        }
    }
}
class Demo{
    public static void main(String[] args) throws InterruptedException {
        BigBrother bigBrother = new BigBrother();
        Man you = new Man();
        Thread brotherThread = new Thread(bigBrother);
        brotherThread.setDaemon(true);
        brotherThread.start();
        new Thread(you).start();
    }
}

最后一段輸出結果:

你99歲了
Big Brother has watched you54times
////// ansl \\\
Big Brother has watched you55times
Big Brother has watched you56times
Big Brother has watched you57times
Big Brother has watched you58times
Big Brother has watched you59times
Big Brother has watched you60times
Big Brother has watched you61times
Big Brother has watched you62times
Big Brother has watched you63times
Big Brother has watched you64times
Big Brother has watched you65times
Big Brother has watched you66times
Big Brother has watched you67times
Big Brother has watched you68times

Big Brother的循環(huán)還沒跑完,JVM就關機了踏揣。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末庆亡,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子捞稿,更是在濱河造成了極大的恐慌又谋,老刑警劉巖拼缝,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異彰亥,居然都是意外死亡咧七,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門任斋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來继阻,“玉大人,你說我怎么就攤上這事废酷⊙妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵锦积,是天一觀的道長。 經常有香客問我歉嗓,道長丰介,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任鉴分,我火速辦了婚禮哮幢,結果婚禮上,老公的妹妹穿的比我還像新娘志珍。我一直安慰自己橙垢,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布伦糯。 她就那樣靜靜地躺著柜某,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敛纲。 梳的紋絲不亂的頭發(fā)上喂击,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音淤翔,去河邊找鬼翰绊。 笑死,一個胖子當著我的面吹牛旁壮,可吹牛的內容都是我干的监嗜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抡谐,長吁一口氣:“原來是場噩夢啊……” “哼裁奇!你這毒婦竟也來了?” 一聲冷哼從身側響起麦撵,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤框喳,失蹤者是張志新(化名)和其女友劉穎课幕,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體五垮,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡乍惊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了放仗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片润绎。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诞挨,靈堂內的尸體忽然破棺而出莉撇,到底是詐尸還是另有隱情,我是刑警寧澤惶傻,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站银室,受9級特大地震影響涂佃,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蜈敢,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一辜荠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抓狭,春花似錦伯病、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苗桂,卻和暖如春季研,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誉察。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工与涡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人持偏。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓驼卖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸿秆。 傳聞我的和親對象是個殘疾皇子酌畜,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容