2017-06-03 89 views
0
public class ThreadNaming extends Thread { 
    public void run(){ 
     System.out.println(Thread.currentThread().getName()); 
    } 
public static void main(String args[]){ 
    Thread t1 = new ThreadNaming(); 
    Thread t2 = new ThreadNaming(); 
    t1.start(); 
    System.out.println(t1); 
    t2.start(); 
    System.out.println(t2); 
    } 
} 

輸出: 螺紋[線程0,5,主] 線程0 螺紋[線程1,5,主] 線程1默認命名螺紋的公約

public class ThreadOddNaming extends Thread { 
    public void run(){ 
     System.out.println(Thread.currentThread().getName()); 
    } 
public static void main(String args[]){ 
    Thread t3 = new Thread(new ThreadOddNaming()); 
    Thread t4 = new Thread(new ThreadOddNaming()); 
    t3.start(); 
    t4.start(); 
    System.out.println(t3); 
    System.out.println(t4); 
} 
} 

輸出: 主題[主題-1,5,主] 線程3 線程1 主題[主題-3,5,主]

現在,我有兩個問題。

  1. 當使用具有類名(擴展線程)構造函數的新關鍵字創建線程時,線程命名是整數以0,1,2,3 ...(n-1)開始。 但是當用螺紋構造函數傳遞類名(擴展Thread)作爲參數,直接創造了它,那麼線程命名奇數1,3,5開頭..(2N-1)

爲什麼這種行爲是顯示或者平臺是否穩定? (我在windows系統中運行這個程序)。 或者,它可能會針對不同的平臺顯示不同的行爲?

  • 每當我們打印任何線程對象,爲什麼線程的優先級總是被分配給一個線程是NORM_PRIORITY 5.
  • 默認優先級。 那麼,NORM_PRIORITY的值是5嗎?

    +0

    因爲'new Thread(new ThreadOddNaming())'創建了兩個Thread實例。 – saka1029

    回答

    1

    當使用具有類名(擴展的Thread)構造函數的新關鍵字創建Thread時,則線程命名爲整數以0,1,2,3 ...(n-1)開頭。但是,當與線程構造函數傳遞類名(擴展Thread)作爲參數,直接創造了它,那麼線程命名爲奇數號碼以1,3,5 ...(2N-1)

    這是因爲

    Thread t3 = new Thread(new ThreadOddNaming());

    Thread t4 = new Thread(new ThreadOddNaming());

    創建總共4個線程。這就是爲什麼你看到這種行爲。

    每當我們打印任何線程對象,爲什麼線程的優先級總是5.

    因爲對於Thread類的默認優先級是NORM_PRIORITY。

    public final static int NORM_PRIORITY = 5;

    可以在線程的源代碼here看到這一點。

    請記住,新創建的線程的優先級始終與創建者的優先級相同。所以,如果你有一個優先級4線程創建一個新的線程,那麼新的將優先4,除非設置,否則使用setPriority()

    乾杯!