二、Thread构造函数
2020-10-02 本文已影响0人
_Colbert
2.1.1 线程的默认名字
当Thread构造函数中没有传入name时,线程会以“thread-”作为前缀与一个自增的数字进行组合。
public class TestThreadName {
@Test
public void testOne(){
Thread thread = new Thread(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
thread.start();
Thread thread1 = new Thread(){
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
thread1.start();
}
}
Thread-0
Thread-1
2.1.2 给线程命名
@Test
public void testTwo(){
new Thread("自己取得名字"){
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}.start();
}
输出:自己取的名字
2.1.3 修改线程的名字
调用setName()方法,给线程更改一个名字。必须在启动线程之前进行更改
@Test
public void testTwo(){
Thread thread = new Thread("自己取得名字") {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
thread.setName("改了个名字");
thread.start();
}
输出:改了个名字
2.2 线程的父子关系
-
一个线程是由另一个线程创建的(例如在main函数中创建一个新的线程,新的线程就是main线程创建的)。
-
被创建线程的父线程,就是创建他的线程。
所有的构造函数都会去调用init()方法,下面是init()方法的源码。
private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inheritThreadLocals) { if (name == null) { throw new NullPointerException("name cannot be null"); } this.name = name; Thread parent = currentThread(); SecurityManager security = System.getSecurityManager();
TODO------------