java需要什么样的线程启动方法?为什么没有唯一的运行方法?
通过start方法运行线程需要什么?为什么不直接调用run方法呢
What will happened if combined the code of start() and run()
to make it as single method run()
不要解释这两种方法之间的区别,我想知道这个场景
你可以在下面搜索框中键入要查询的问题!
通过start方法运行线程需要什么?为什么不直接调用run方法呢
What will happened if combined the code of start() and run()
to make it as single method run()
不要解释这两种方法之间的区别,我想知道这个场景
# 1 楼答案
简单地说
如果直接调用
run
方法,那么它就像同一线程中的普通方法调用一样说明:
参见Defining and Starting a ThreadaJava教程
Read more...
# 2 楼答案
run()
方法定义线程将执行的操作start()
方法启动线程以执行由run方法实现的任务如果直接调用
run
方法,它将由调用者线程执行。但是,start
方法会导致在新启动的线程中处理任务。在前一种情况下,调用线程等待run方法完成。另一方面,在后一种情况下,新创建的线程将异步执行,因此调用线程将继续其工作,而无需等待run方法的完成# 3 楼答案
你需要知道线程可以有不同的状态。基于http://www.tutorialspoint.com/java/java_multithreading.htm,线程有5种状态
notify
方法来通知该线程它已完成run
方法只包含当线程工作时(当它处于可运行状态时)需要执行的代码start
方法需要负责将威胁状态从new
更改为runnable
,这样它就可以开始工作并使用自己的资源(例如处理器时间)来执行run
方法的代码当您调用
yourThread.run()
时,来自run
方法的代码将由调用此方法的线程执行,但如果您使用yourThread.start()
,则来自run
方法的代码将使用yourThread
的资源执行看看这个例子
run
方法中的代码将暂停运行它的线程两秒钟(因为Thread.sleep(2000);
),以便您可以在两秒钟后看到hello from run
现在输出是这样的
因为
run
方法中的代码是由main线程(处理public static void main(String[] args)
方法的线程)执行的,也因为两秒钟的暂停部分后来印刷的
现在,如果将
t.run()
更改为t.start()
,那么run
方法中的代码将由t
线程执行。你们将通过观察结果看到它,这将是(来自主流)两秒钟后
# 4 楼答案
如果直接调用线程的run()方法,那么该方法中的代码将在调用run()方法的线程中运行。调用start()将创建一个新线程,并在新线程上执行run()方法中的代码
简单地说,直接调用run()可能是一个错误,因为实际上并没有创建新线程
请参阅以下链接以获取参考
http://javarevisited.blogspot.co.uk/2012/03/difference-between-start-and-run-method.html
# 5 楼答案
When program calls start() method a new Thread is created and code inside run() method is executed in new Thread while if you call run() method directly no new Thread is created and code inside run() will execute on current Thread.
每个线程在一个单独的调用堆栈中启动
从主线程调用run()方法,run()方法进入当前调用堆栈,而不是新调用堆栈的开头
请参阅What if we call run() method directly instead start() method?另请参阅Difference between start and run method in Thread