多線程系列10-線程優(yōu)先級(jí)與守護(hù)線程

每個(gè)線程都有一個(gè)優(yōu)先級(jí)?!案邇?yōu)先級(jí)線程”會(huì)優(yōu)先于“低優(yōu)先級(jí)線程”執(zhí)行。每個(gè)線程都可以被標(biāo)記為一個(gè)守護(hù)進(jìn)程或非守護(hù)進(jìn)程。在一些運(yùn)行的主線程中創(chuàng)建新的子線程時(shí),子線程的優(yōu)先級(jí)被設(shè)置為等于“創(chuàng)建它的主線程的優(yōu)先級(jí)”,當(dāng)且僅當(dāng)“創(chuàng)建它的主線程是守護(hù)線程”時(shí)“子線程才會(huì)是守護(hù)線程”。

每一個(gè)線程都被標(biāo)記為“守護(hù)線程”或“用戶線程”。當(dāng)只有守護(hù)線程運(yùn)行時(shí),JVM會(huì)自動(dòng)退出。

public class Thread1001{

    static class Thread1002 extends Thread{

        public Thread1002(String name){
            super(name);
        }

        @Override
        public void run() {
            try{
                for(int i=0;i<5;i++){
                    Thread.sleep(3);
                    System.out.println(this.getName() + " isDaemon(): " + this.isDaemon() + " loop: " + i);
                }
            } catch (InterruptedException e){

            }
        }
    }

    static class Thread1003 extends Thread{

        public Thread1003(String name){
            super(name);
        }

        @Override
        public void run() {
            try{
                for(int i=0;i<1000;i++){
                    Thread.sleep(1);
                    System.out.println(this.getName() + " isDaemon(): " + this.isDaemon() + " loop: " + i);
                }
            } catch (InterruptedException e){

            }
        }
    }

    public static void main(String[] args) {

        System.out.println(Thread.currentThread().getName() + " isDaemon: " + Thread.currentThread().isDaemon());

        Thread t1 = new Thread1002("t1");
        Thread t2 = new Thread1003("t2");

        t2.setDaemon(true);

        t1.start();
        t2.start();
    }

}

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

main isDaemon: false
t2 isDaemon(): true loop: 0
t2 isDaemon(): true loop: 1
t1 isDaemon(): false loop: 0
t2 isDaemon(): true loop: 2
t2 isDaemon(): true loop: 3
t1 isDaemon(): false loop: 1
t2 isDaemon(): true loop: 4
t2 isDaemon(): true loop: 5
t1 isDaemon(): false loop: 2
t2 isDaemon(): true loop: 6
t1 isDaemon(): false loop: 3
t2 isDaemon(): true loop: 7
t2 isDaemon(): true loop: 8
t1 isDaemon(): false loop: 4
t2 isDaemon(): true loop: 9

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

  1. 主線程main是用戶線程,它創(chuàng)建的子線程t1也是用戶線程。
  2. t2是守護(hù)線程。在“主線程main”和“子線程t1”(它們都是用戶線程)執(zhí)行完畢,只剩t2這個(gè)守護(hù)線程的時(shí)候,JVM自動(dòng)退出。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容