线程中start()和run()方法的区别
1.分析线程的执行流程(代码角度)
在我们创建一个thread对象后,并未和操作系统的系统联系在一起,只是单纯的取出了Thread的一个实例对象,此时线程还是处于一个新建的状态;在调用start()方法后,线程由新建转变为可运行状态,注意此时线程并未开始执行任务,处于一种等待的状态,所以run()方法还未被执行;在cpu分配给当前线程运行的时间片后,此时线程会执行线程体,也就是我们所谓的run()方法;在run()方法执行完后,线程的整个生命周期也就结束了。
2.总结具体不同
2.1 start()方法是开启线程的入口,run()方法只是封装了线程执行的业务逻辑代码;
2.2 start()方法不可重复调用,run()方法可反复调用;
2.3 调用start()方法后,真正执行线程体的线程是当前创建的thread对象;直接调用run()方法的话,真正执行线程体的线程是main主线程;
3.注意事项
如果多次调用start()方法,会抛出IllegalThreadStateException异常,该线程属于线程状态异常;
因为在start()的源码中可以看到【if (threadStatus != 0) throw new IllegalThreadStateException();】这段代码,实际就是对线程的状态作了一个限制处理,我们知道线程是由新建,就绪,阻塞,运行,死亡这五种状态,也就表示threadStatus这个状态值存在五种,当为0时,表示线程处于新建状态;假设调用两次start()方法,第一次调用时,会判断此时线程是否处于新建状态,在第一次start()调用结束后,线程是处于死亡状态的,自然threadStatus的值不会为0,【private volatile int threadStatus = 0;】threadStatus这个变量是Thread内部维护的一个私有的变量,而且还加上了volatile保证其值不会被改变,因此在第二次调用start()才会抛出异常。
- Java线程中run和start方法的区别
- Java线程中run和start方法的区别
- java线程中run和start方法的区别
- 线程的start和run方法的区别
- [Java笔试面试知识点自整理系列]Java线程中run和start方法的区别
- Java线程中run和start方法的区别
- Java线程中run和start方法的区别
- Thread线程中start()和run()方法的区别
- Java线程中run和start方法的区别
- 线程中start方法与run方法的区别-java教程
- Java线程中run和start方法的区别
- java 线程中start方法与run方法的区别详细介绍
- Java线程中run和start方法的区别
- 线程的start()方法和run()方法的区别
- 复习线程----调用run()方法和调用start()方法的区别
- Java线程中run和start方法的区别
- Java中启动线程start和run方法的区别
- java 线程中start方法与run方法的区别详细介绍
- 线程run和start方法区别
- 线程中run()和start()方法的区别