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,主]
现在,我有两个问题。
为什么会显示此行为或平台是否为常量? (我在windows系统中运行了这个程序)。 或者,它可能会针对不同平台显示不同的行为?
分配给线程的默认优先级是NORM_PRIORITY。 那么,NORM_PRIORITY的值是5吗?
答案 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()
干杯!