默认命名线程约定

时间:2017-06-03 07:48:00

标签: java multithreading

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. 当使用带有类名(扩展线程)构造函数的new关键字创建Thread时,线程命名是整数,以0,1,2,3 ......(n-1)开头。 但是当它直接使用Thread构造函数创建传递类名(扩展Thread)作为参数时,则线程命名是奇数,以1,3,5开头。(2n-1)
  2. 为什么会显示此行为或平台是否为常量? (我在windows系统中运行了这个程序)。 或者,它可能会针对不同平台显示不同的行为?

    1. 每当我们打印任何线程对象时,为什么线程的优先级始终为5.
    2. 分配给线程的默认优先级是NORM_PRIORITY。 那么,NORM_PRIORITY的值是5吗?

1 个答案:

答案 0 :(得分:1)

  

当使用带有类名(扩展线程)构造函数的new关键字创建Thread时,线程命名是整数,以0,1,2,3 ......(n-1)开头。但是当它直接使用Thread构造函数创建传递类名(扩展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;

您可以在Thread的源代码here中看到这一点。

请记住,新创建的主题的优先级始终与其创建者具有相同的优先级。因此,如果您有一个优先级为4的线程创建一个新线程,那么新的线程将优先级为4,除非另外使用setPriority()

干杯!