Thread调用run()和start()方法的区别
来源:互联网 发布:cf东东数据一键刷枪 编辑:程序博客网 时间:2024/06/02 02:35
下面是一道阿里在线笔试题目,要求给出程序的输出结果:
class TaskBGThread extends Thread { private int i=1; public void run() { System.out.print("TaskBG" + i); i++; }}public class TaskThread implements Runnable { private int i=1; public void run() { System.out.print("Task" + i); i++; } public static void main(String[] args) { Runnable runner = new TaskThread(); Thread thTask1 = new Thread(runner); thTask1.run(); Thread thTask2 = new Thread(runner); thTask2.start(); Thread thTaskBG1 = new TaskBGThread(); thTaskBG1.start(); Thread thTaskBG2 = new TaskBGThread(); thTaskBG2.start(); }}
乍一看,觉得thTask1.run();不起作用,因为启动线程不都是调用start()使线程处于就绪态,等待CPU调度么,等真正执行线程体run()方法是由JVM调用的;所以当时觉得thTask1.run();不会起作用。
但是程序输出结果是:Task1Task2TaskBG1TaskBG1
thTask1.run();起了作用,且输出是Task1。
下面看Thread直接调用run()和start()方法的区别:
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程。
start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用。通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容,run方法运行结束, 此线程终止, 而CPU再运行其它线程。
run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码;如果直接用run方法, 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
- Thread直接调用run()和start()方法的区别
- Thread中调用start()和run()方法的区别
- Thread调用run()和start()方法的区别
- Thread的run和start方法区别
- Thread run()和start()方法的区别
- Thread类调用run()方法和调用start()方法的区别
- thread.start和 thread.run 的区别
- Thread.start()和Thread.run()的区别
- Thread.java start方法和run方法的区别
- java Thread中,run方法和start方法的区别
- thread中start和run方法的区别
- Java Thread中start和run方法的区别?
- java Thread线程run()和start()方法的区别
- Thread线程中start()和run()方法的区别
- Thread类中start和run方法的区别
- Java -- Thread中start和run方法的区别
- Java Thread中start和run方法的区别
- Thread调用start、run区别
- 在Maven工程中java中@override报错
- Python List append()方法应用
- hiho 1626 缩写命名 [Offer收割]编程练习赛35 Problem D 二分图匹配
- 思科路由模拟器 -- (5)交换机配置基础、STP协议及VLAN划分
- 输出不同形式九九乘法表
- Thread调用run()和start()方法的区别
- Richard Sutton经典教材《强化学习》第二版公布(附PDF下载)
- Maximum Subsequence CodeForces
- 解决鸡兔同笼问题
- 近年推荐系统论文调查汇总
- HDOJ 1405 The Last Practice
- C语言进阶-第15~16讲:结构体应用(玩转日期和时间)
- while(满足条件后再执行)
- visual studio 2012打开提示 未能将网站×××配置为使用 ASP.NET 4.5 和 尚未在Web服务器上注册,您需要手动将Web服务器配置为使用ASP.NET 4.5,问题解决