时间:2021-05-20
1、为什么启动线程不用run()方法而是使用start()方法
run()方法只是一个类中的普通方法,调用run方法跟调用普通方法一样
而start()是创建线程等一系列工作,然后自己调用run里面的任务内容。
验证代码:
/** * @data 2019/11/8 - 下午10:29 * 描述:run()和start() */public class StartAndRunMethod { public static void main(String[] args) { Runnable runnable = new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } }; runnable.run(); new Thread(runnable).start(); }}结果:
main
Thread-0
2、start()源码解读
启动新线程检查线程状态
关于threadStatus源码:
/* * Java thread status for tools, default indicates thread 'not yet started' */ private volatile int threadStatus;通过代码可以看到就是threadStatus就是记录Thread的状态,初始线程默认为0.
加入线程组
调用start0()
start0()方法使用c++编写的方法,这些代码在gdk代码中,所以这里不再这里探究了。
3、start()方法不能使用多次
通过刚刚源码分析,就知道start方法刚开始就检查线程状态,当线程创建后或结束了,该状态就不同于初始化状态就会抛出IllegalThreadStateException异常。
测试代码:
start不可以使用多次
4、注意点:
start方法是被synchronized修饰的方法,可以保证线程安全。
由jvm创建的main方法线程和system组线程,并不会通过start来启动。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
之前有简单介绍过java多线程的使用,已经Thread类和Runnable类,为了更好地理解多线程,本文就Thread进行详细的分析。start()我们先来看看
线程中start方法与run方法的区别在线程中,如果start方法依次调用run方法,为什么我们会选择去调用start方法?或者在java线程中调用start方
本文实例为大家解析了Python多线程,供大家参考,具体内容如下1、多线程的理解多进程和多线程都可以执行多个任务,线程是进程的一部分。线程的特点是线程之间可以共
Python多线程的实例详解一)线程基础1、创建线程:thread模块提供了start_new_thread函数,用以创建线程。start_new_thread
Java中CountDownLatch进行多线程同步详解CountDownLatch介绍在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法:1