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接口实现类对象和线程名!

时间: 2024-08-11 07:40:38

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

(转)关于 Java 对象序列化您不知道的 5 件事

关于 Java 对象序列化您不知道的 5 件事 转自:http://developer.51cto.com/art/201506/479979.htm 数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足以完成手头上任务的知识而已.在本 系列 中,Ted Neward 深入挖掘 Java 平台的核心功

疯狂Java学习笔记(84)----------关于 Java 对象序列化您不知道的 5 件事

数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足以完成手头上任务的知识而已.在本 系列 中,Ted Neward 深入挖掘 Java 平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程挑战. 大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户设置存储在一个 Hashta

关于 Java 对象序列化您不知道的 5 件事

数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足以完成手头上任务的知识而已.在本 系列 中,Ted Neward 深入挖掘 Java 平台的核心功能,揭示一些鲜为人知的事实,帮助您解决最棘手的编程挑战. 大约一年前,一个负责管理应用程序所有用户设置的开发人员,决定将用户设置存储在一个 Hashta

关于 Java 性能监控您不知道的 5 件事,第 1 部分

责怪糟糕的代码(或不良代码对象)并不能帮助您发现瓶颈,提高 Java? 应用程序速度,猜测也不能帮您解决.Ted Neward 引导您关注 Java 性能监控工具,从5 个技巧开始,使用Java 5 的内置分析器JConsole 收集和分析性能数据. 当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中.跟踪 Java 应用程序瓶颈来源一直以来都是很麻烦的,因为 Java 虚拟机有黑盒效应,而且 Java 平台分析工具一贯就有缺陷. 然而,随着 Java 5 中 JConsole 的

关于多线程编程您不知道的 5 件事

虽然很少有 Java? 开发人员能够忽视多线程编程和支持它的 Java 平台库,更少有人有时间深入研究线程.相反地,我们临时学习线程,在需要时向我们的工具箱添加新的技巧和技术.以这种方式构建和运行适当的应用程序是可行的,但是您可以做的不止这些.理解 Java 编译器的线程处理特性和 JVM 将有助于您编写更高效.性能更好的 Java 代码. 在这期的 5 件事 系列 中,我将通过同步方法.volatile 变量和原子类介绍多线程编程的一些更隐晦的方面.我的讨论特别关注于这些构建如何与 JVM 和

JavaScript中你可能不知道的九件事

今天凑巧去W3School扫了一遍JavaScript教程,发现从中看到了不少自己以前没有注意过的细节. 我这些细节列在这里,分享给可能同样不知道的朋友: 1.使用 document.write() 仅仅向文档输出写内容.如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖: 实例 <!DOCTYPE html> <html> <body> <h1>My First Web Page</h1> <p>

关于Java你可能不知道的10件事

关于Java你可能不知道的10件事 分享到: 24 本文由 ImportNew - Jerry Lee 翻译自 Jooq.欢迎加入翻译小组.转载请参见文章末尾的要求. 呃,你是不是写Java已经有些年头了?还依稀记得这些吧: 那些年,它还叫做Oak:那些年,OO还是个热门话题:那些年,C++同学们觉得Java是没有出路的:那些年,Applet还风头正劲-- 但我打赌下面的这些事中至少有一半你还不知道.这周我们来聊聊这些会让你有些惊讶的Java内部的那些事儿吧. 1. 其实没有受检异常(check

关于 java.util.concurrent 您不知道的 5 件事--转

第 1 部分 http://www.ibm.com/developerworks/cn/java/j-5things4.html Concurrent Collections 是 Java™ 5 的巨大附加产品,但是在关于注释和泛型的争执中很多 Java 开发人员忽视了它们.此外(或者更老实地说),许多开发人员避免使用这个数据包,因为他们认为它一定很复杂,就像它所要解决的问题一样. 事实上,java.util.concurrent 包含许多类,能够有效解决普通的并发问题,无需复杂工序.阅读本文,

关于软件开发,你老板不知道的7件事

英文原文:7 Things Your Boss Doesn’t Understand About Software Development 你的老板是否不理解你的工作?本文将有助于你更好地理解为什么你的老板不理解软件开发. 你的老板可能真的很棒.我在我自己的编程生涯中就遇到过几个真心棒的老板,但即使是最棒的老板似乎也常常总是不能理解软件开发. 事实上,我想说的是当涉及到不止编程的几个元素时,大多数软件开发经理都有点目光短浅. 所以,我编译了一个简短的清单,用来说明关于编程一些最让你老板.开发经理