線程的名稱

Java可通過Thread的構造方法給當前線程命名。當程序員不爲線程命名,線程會自己爲他命名。

當Java虛擬運行時,至少會有兩個線程,那麼這兩個線程的名稱系統默認是什麼呢?


public class Test {

    public static void main(String[] args) {
        //顯示系統給當前線程的命名
        method1();
        //自己爲當前線程命名
        method2();
        //顯示main線程的名稱
        method3();
        //顯示垃圾收集器的名稱
        //method4();
    }
    
    /*
     * 顯示系統給當前線程的命名
     */
    public static void method1(){
        //通過Thread對象的start()方法調用使當前線程開始運行
        new Thread(new Runnable() {
            public void run() {
            //獲得系統爲當前線程自動命名的名稱
            String name = Thread.currentThread().getName();
            
            //顯示線程當前的名稱
            System.out.println("虛擬機爲該線程命名的名稱爲:" + name);
            }
        }).start();
    }
    
    /*
     * 自己爲當前線程命名
     */
    public static void method2(){
        Runnable runnable = new Runnable() {
            
            public void run() {
                //獲得當前線程的名稱
                String name = Thread.currentThread().getName();
                
                //顯示線程當前的名稱
                System.out.println("虛擬機爲該線程命名的名稱爲:" + name);
            }
        };
        
        //爲當前線程命名並使當前線程開始運行
        new Thread(runnable, "線程1").start();
    }

    /*
     * 顯示main線程的名稱
     */
    public static void method3(){
        String name = Thread.currentThread().getName();
        System.out.println("main線程的名稱:" + name);
    }
    
    /*
     * 顯示垃圾收集器的名稱
     */
    public static void method4(){
        //爲內存增加對象,以便虛擬機會自動調用垃圾收集器的,垃圾收集器再調用垃圾對象的finalize()方法
        for(int i = 0; i < 1000; i++){
            new Demo();
        }
        
        //調用系統的gc()方法以便提醒虛擬機調用垃圾收集器
        System.gc();
    }
}

/*
 * 重寫該類的finalize方法一邊垃圾收集器調用該方法時顯示垃圾處理器的名稱。
 */
class Demo{
    private int i = 0;
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        //獲得垃圾處理器的線程名稱
        String name = Thread.currentThread().getName();
        System.out.println("垃圾處理器的名稱是:" + name);
            
    }
    
}

程序運行結果是:

method1()、method2()、method3()運行的結果:

虛擬機爲該線程命名的名稱爲:Thread-0
main線程的名稱:main
虛擬機爲該線程命名的名稱爲:線程1

當想了解垃圾收集器的名稱時,因爲不能管理finalize()方法的運行次數。可能會運行很多次,Console端口可能會覆蓋掉其他線程名稱的顯示,所以單獨線程垃圾收集器名稱

發佈了19 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章