二、Thread构造函数

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------------

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容