03_線程組和線程優(yōu)先級

一牍蜂、線程組

每個Thread必然存在于一個ThreadGroup中嫩海,Thread不能獨立于ThreadGroup存在早抠。

1.1递胧、main方法的線程組

package co.dianjiu.thread;

public class MyThreadGroup {
    public static void main(String[] args) {
        //查看main方法所在線程組和線程名
        System.out.println("Main方法線程組名===>"+
                           Thread.currentThread().getThreadGroup().getName());
        System.out.println("Main方法線程名===>"+Thread.currentThread().getName());
    }
}

輸出結(jié)果

Main方法線程組名===>main
Main方法線程名===>main

1.2碑韵、不指定線程組

在new Thread時沒有顯式指定,那么默認(rèn)將父線程(當(dāng)前執(zhí)行new Thread的線程)線程組設(shè)置為自己的線程組缎脾。

package co.dianjiu.thread;

public class MyThreadGroup {
    public static void main(String[] args) {
        Thread myThread = new Thread(()->{
            System.out.println("MyThread線程組名===>"+
                               Thread.currentThread().getThreadGroup().getName());
            System.out.println("MyThread線程名===>"+Thread.currentThread().getName());
        });
        myThread.start();
    }
}

輸出結(jié)果

MyThread線程組名===>main
MyThread線程名===>Thread-0

1.3祝闻、如何指定線程組

package co.dianjiu.thread;

public class MyThreadGroup {
    public static void main(String[] args) {
        //指定線程組
        ThreadGroup threadGroup = new ThreadGroup("MyThreadGroup");
        Thread myThread = new Thread(threadGroup, new MyRunnableDemo());
        myThread.start();

    }

    public static class MyRunnableDemo implements Runnable{
        @Override
        public void run() {
            System.out.println("MyRunnableDemo線程組名===>"+
                               Thread.currentThread().getThreadGroup().getName());
            System.out.println("MyRunnableDemo線程名===>"+
                               Thread.currentThread().getName());
        }
    }
}

輸出結(jié)果

MyRunnableDemo線程組名===>MyThreadGroup
MyRunnableDemo線程名===>Thread-0

二、線程優(yōu)先級

Java中線程優(yōu)先級可以指定遗菠,范圍是1~10联喘,默認(rèn)的線程優(yōu)先級為5华蜒。線程的執(zhí)行順序由調(diào)度程序來決定,線程的優(yōu)先級會在線程被調(diào)用之前設(shè)定豁遭。通常情況下叭喜,高優(yōu)先級的線程有更高的幾率得到執(zhí)行。

2.1蓖谢、main方法的優(yōu)先級

package co.dianjiu.thread;

public class MyThreadPriority {
    public static void main(String[] args) {
        System.out.println("Main方法線程優(yōu)先級===>"+Thread.currentThread().getPriority());
    }

}

輸出結(jié)果

Main方法線程優(yōu)先級===>5

2.2捂蕴、如何設(shè)置線程的優(yōu)先級

使用setPriority()設(shè)置線程的優(yōu)先級

package co.dianjiu.thread;

public class MyThreadPriority {
    public static void main(String[] args) {

        Thread myThread = new Thread(()->{
            System.out.println("MyThread線程優(yōu)先級===>"+
                               Thread.currentThread().getPriority());
        });
        myThread.setPriority(8);
        myThread.start();
    }
}

輸出結(jié)果

MyThread線程優(yōu)先級===>8

2.3、優(yōu)先級高一定先執(zhí)行嗎

不一定闪幽,只是優(yōu)先執(zhí)行的幾率大些啥辨,最終的執(zhí)行順序還是由操作系統(tǒng)決定。

package co.dianjiu.thread;

import java.util.stream.IntStream;

public class MyThreadPriority {
    public static void main(String[] args) {
        IntStream.range(1, 10).forEach(i -> {
            Thread thread = new Thread(new MyThreadDemo());
            thread.setPriority(i);
            thread.start();
        });
    }

    public static class MyThreadDemo extends Thread {
        @Override
        public void run() {
            super.run();
            System.out.println(String.format("當(dāng)前執(zhí)行的線程是===>%s盯腌,優(yōu)先級===>%d",
                    Thread.currentThread().getName(),
                    Thread.currentThread().getPriority()));
        }
    }
}

輸出結(jié)果

當(dāng)前執(zhí)行的線程是===>Thread-15溉知,優(yōu)先級===>8
當(dāng)前執(zhí)行的線程是===>Thread-3,優(yōu)先級===>2
當(dāng)前執(zhí)行的線程是===>Thread-1腊嗡,優(yōu)先級===>1
當(dāng)前執(zhí)行的線程是===>Thread-9着倾,優(yōu)先級===>5
當(dāng)前執(zhí)行的線程是===>Thread-7拾酝,優(yōu)先級===>4
當(dāng)前執(zhí)行的線程是===>Thread-17燕少,優(yōu)先級===>9
當(dāng)前執(zhí)行的線程是===>Thread-5,優(yōu)先級===>3
當(dāng)前執(zhí)行的線程是===>Thread-11蒿囤,優(yōu)先級===>6
當(dāng)前執(zhí)行的線程是===>Thread-13客们,優(yōu)先級===>7

2.4、如何設(shè)置線程組的優(yōu)先級

使用setMaxPriority()方法

package co.dianjiu.thread;

public class MyThreadPriority {
    public static void main(String[] args) {
        ThreadGroup threadGroup = new ThreadGroup("MyThreadGroup");
        threadGroup.setMaxPriority(6);
        System.out.println("MyThreadGroup線程組優(yōu)先級===>"+threadGroup.getMaxPriority());
    }
}

輸出結(jié)果

MyThreadGroup線程組優(yōu)先級===>6

2.5材诽、線程和線程組優(yōu)先級不一致

當(dāng)某個線程的優(yōu)先級大于線程組時底挫,線程優(yōu)先級會被重置為線程組的優(yōu)先級

package co.dianjiu.thread;

public class MyThreadPriority {
    public static void main(String[] args) {
        ThreadGroup threadGroup = new ThreadGroup("MyThreadGroup");
        //線程組優(yōu)先級為6
        threadGroup.setMaxPriority(6);
        System.out.println("MyThreadGroup線程組優(yōu)先級===>"+threadGroup.getMaxPriority());
        Thread thread = new Thread(threadGroup, new MyThreadDemo());
        //線程優(yōu)先級為9
        thread.setPriority(9);
        thread.start();
    }

    public static class MyThreadDemo extends Thread {
        @Override
        public void run() {
            super.run();
            System.out.println(String.format("當(dāng)前執(zhí)行的線程是===>%s,優(yōu)先級===>%d",
                    Thread.currentThread().getName(),
                    Thread.currentThread().getPriority()));
        }
    }
}

輸出結(jié)果

MyThreadGroup線程組優(yōu)先級===>6
當(dāng)前執(zhí)行的線程是===>Thread-1脸侥,優(yōu)先級===>6

當(dāng)某個線程的優(yōu)先級小于線程組時建邓,該線程的優(yōu)先級不會被重置。

package co.dianjiu.thread;

public class MyThreadPriority {
    public static void main(String[] args) {
        ThreadGroup threadGroup = new ThreadGroup("MyThreadGroup");
        //線程組優(yōu)先級為6
        threadGroup.setMaxPriority(6);
        System.out.println("MyThreadGroup線程組優(yōu)先級===>"+threadGroup.getMaxPriority());
        Thread thread = new Thread(threadGroup, new MyThreadDemo());
        //線程優(yōu)先級為4
        thread.setPriority(4);
        thread.start();
    }

    public static class MyThreadDemo extends Thread {
        @Override
        public void run() {
            super.run();
            System.out.println(String.format("當(dāng)前執(zhí)行的線程是===>%s睁枕,優(yōu)先級===>%d",
                    Thread.currentThread().getName(),
                    Thread.currentThread().getPriority()));
        }
    }
}

輸出結(jié)果

MyThreadGroup線程組優(yōu)先級===>6
當(dāng)前執(zhí)行的線程是===>Thread-1官边,優(yōu)先級===>4

2.6、如何使用守護(hù)線程

守護(hù)線程的默認(rèn)優(yōu)先級比較低外遇,使用setDaemon(boolean on)方法設(shè)置該線程為守護(hù)線程注簿。

如果某線程是守護(hù)線程,那如果所有的非守護(hù)線程結(jié)束跳仿,這個守護(hù)線程也會自動結(jié)束诡渴。

package co.dianjiu.thread;

import java.util.stream.IntStream;

public class MyThreadPriority {
    public static void main(String[] args) {
        //默認(rèn)優(yōu)先級為5
        System.out.println("Main方法線程優(yōu)先級===>"+Thread.currentThread().getPriority());
        //如何設(shè)置線程優(yōu)先級
        Thread myThread = new Thread(()->{
            System.out.println("MyThread線程優(yōu)先級===>"+
                    Thread.currentThread().getPriority());
        });
        myThread.setPriority(8);
        myThread.start();
        //設(shè)置守護(hù)線程
        Thread threadDemo = new Thread(()->{
            System.out.println("MyThread守護(hù)線程優(yōu)先級===>"+
                    Thread.currentThread().getPriority());
        });
        threadDemo.setDaemon(true);
        threadDemo.start();
    }

}

輸出結(jié)果

Main方法線程優(yōu)先級===>5
MyThread線程優(yōu)先級===>8
MyThread守護(hù)線程優(yōu)先級===>5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市菲语,隨后出現(xiàn)的幾起案子妄辩,更是在濱河造成了極大的恐慌惑灵,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眼耀,死亡現(xiàn)場離奇詭異泣棋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)畔塔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門潭辈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澈吨,你說我怎么就攤上這事把敢。” “怎么了谅辣?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵修赞,是天一觀的道長。 經(jīng)常有香客問我桑阶,道長柏副,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任蚣录,我火速辦了婚禮割择,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘萎河。我一直安慰自己荔泳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布虐杯。 她就那樣靜靜地躺著玛歌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擎椰。 梳的紋絲不亂的頭發(fā)上支子,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音达舒,去河邊找鬼值朋。 笑死,一個胖子當(dāng)著我的面吹牛休弃,可吹牛的內(nèi)容都是我干的吞歼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼塔猾,長吁一口氣:“原來是場噩夢啊……” “哼篙骡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤糯俗,失蹤者是張志新(化名)和其女友劉穎尿褪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體得湘,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡杖玲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淘正。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摆马。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鸿吆,靈堂內(nèi)的尸體忽然破棺而出囤采,到底是詐尸還是另有隱情,我是刑警寧澤惩淳,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布蕉毯,位于F島的核電站,受9級特大地震影響思犁,放射性物質(zhì)發(fā)生泄漏代虾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一激蹲、第九天 我趴在偏房一處隱蔽的房頂上張望棉磨。 院中可真熱鬧,春花似錦托呕、人聲如沸含蓉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斟赚,卻和暖如春着降,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拗军。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工任洞, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人发侵。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓交掏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刃鳄。 傳聞我的和親對象是個殘疾皇子盅弛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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