码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-29 18:55:24      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:string   get   next   构造函数   nbsp   new   创建   java   ble   

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对象你也许不知道的几件事

标签:string   get   next   构造函数   nbsp   new   创建   java   ble   

原文地址:http://www.cnblogs.com/python-machine/p/7257006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!