线程的命名与取得
所有的线程程序的执行,每一次都是不同的运行结果,因为他会根据自己的情况进行资源的抢占与分配,所以如果区分每一个线程,必须依靠线程的名字。对于线程的名字,一般会在其启动之前进行定义,不建议对已经启动的线程更改名称,或者是为不同的线程设置重名的情况。
如果要进行线程名称的更改,可以使用Thread类的如下方法:
- 构造方法:public Thread(Runnable target,String name)
- 设置名字:public final void setName(String name);
- 取得名字:public final String getName();
观察线程的名字
package com.yangwishe64.threadAndProcess;
public class ThreadName {
public static void main(String[] args) {
MyThread1 m1=new MyThread1();
System.out.println(new Thread(m1).getName());
System.out.println(new Thread(m1).getName());
System.out.println(new Thread(m1).getName());
}
}
class MyThread1 extends Thread{
@Override
public void run() {
}
}
运行结果
如果在实例化Thread类对象的时候没有为其设置名字,那么会自动的进行编号命名,就是说保证线程对象的名字不重复。
这些方法都是Thread类里面的,可是如果换回线程类Runnable子类,并没有继承Thread类,如果要想取得线程名字,能够取得的就是当前执行本方法的线程名字。所以在Thread类里面,提供有一个方法:
Thread.currentThread();
主方法就是一个线程(main线程),那么所有在主方法上创建的线程实际上都可以将其表示为子线程。
线程其实一直都存在,主方法就是主线程
每当使用java语言去解释一个java类的时候,就相当于启动了一个新的进程,而main只是新进程上的子线程而已
问:每个jvm进程启动时候至少启动几个线程?
- main主线程
- gc线程
默认情况下,在休眠的时候如果设置了多了线程对象,那么所有的线程对象将一起进入run()方法里面,但其实是有顺序的。