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端口可能會覆蓋掉其他線程名稱的顯示,所以單獨線程垃圾收集器名稱