4.构造Thread对象你也许不知道的几件事

Posted python-data-machine

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4.构造Thread对象你也许不知道的几件事相关的知识,希望对你有一定的参考价值。

1.Thread类对象只有在调用了start()方法之后,JVM虚拟机才会给我们创建一个真正的线程!否则就不能说是创建了线程!也就是说new Thread()之后,此时实际上在计算机底层,操作系统实际上并没有为我们创建线程!

在我们new Thread();的时候,我们点击源码就可以看到:

    public Thread() {
        init(null, null, "Thread-" + nextThreadNum(), 0);
    }

实际上是调用了init()方法,而且这个init()方法有几个参数,这里nextThreadNum()这个方法点进去就可以看到这是个静态方法,静 态方法只会在JVM启动的时候加载一次!

那这几个参数又是什么意思呢?我们再点击去:

    private void init(ThreadGroup g, Runnable target, String name,
                      long stackSize) {
        init(g, target, name, stackSize, null);
    }

可以看到init方法的几个参数,第一个参数是线程组,第二个参数是Runnable接口类对象,第三个参数是线程名称[从上一个init方法可以看出传递过来的名称是"Thread-数字"格式的名称],最后一个是栈的大小!然后在这个init()方法内部又调用了另一个重载的init()方法:

总结1:构造函数new Thread();  创建线程对象Thread,默认有一个线程名,都是以Thread-开头,从0开始!形如:

     Thread-0 Thread-1 Thread-2 Thread-3等! 而且这种构造方法的target会被传递为null!也就是用这个构造

     方法时最终Runnable类型的target对象会被设置为null!此时再看源码就可以知道如果target被设置为null,那

       么start()方法在调用start0()方法,而start0()方法在调用run()方法的时候就不会再调用Runnable实现类的run()

    方法,那么此时如果不调用target对象的run方法,我们此时就要自己重写这个Thread类 的run方法了,此时

       调用Thread类对象的start方法,才会执行我们自己写的run方法,如果我们自己此时也不重写Thread类的run

       方法,那么什么也不会执行!

 

总结2:当然我们也可以使用Thread(String name)这个构造函数给线程对象起一个名子!

总结3:我们可以通过Thread(Runnable target, String name)这个构造函数在创建Thread对象的时候给Thread传递一个Runnable接口实现类对象和线程名!

 

以上是关于4.构造Thread对象你也许不知道的几件事的主要内容,如果未能解决你的问题,请参考以下文章

php 5.6 已死,关于 php 7 你必须知道的几件事

PHP5.6 over,关于PHP7你必须知道的几件事

php5.6 over,关于php7你必须知道的几件事

颠覆完美软件:软件测试必须知道的几件事(总结)

技术书写作你要知道的几件事

技术书写作你要知道的几件事