为什么我们需要通过start方法运行线程,而不是直接通过run方法运行?在使用线程时需要java中的启动方法
1
A
回答
3
由于run
方法包含新线程应执行的代码。
如果您打电话给run
方法,那么您只需在当前线程上执行它。
调用start
启动新线程,然后在新线程上执行run
方法。
6
run
方法只是在当前线程中执行线程的任务。从历史上看,您可以继承Thread
并覆盖run
- 虽然今天首选的机制是通过Thread
构造函数Runnable
。因此run
本身不会执行任何线程 - 它是start
,它会创建一个新的“实际”线程(而不仅仅是一个Thread
对象),并在启动时执行run()
。
1
start()
方法告诉JVM它需要创建一个特定于系统的线程。创建系统资源后,它将Runnable
对象传递给它以执行其run()
方法。直接调用run()
方法的“线程”与调用对象在同一线程中执行,而不是像预期的那样在单独的执行线程中执行。
换句话说,调用run()
就像正常的方法调用一样。而调用start()
会告诉线程创建必要的系统资源,然后异步执行run()
方法。
编辑:
例如,
伪代码1:
thread one = new thread();
thread two = new thread();
one.run();
two.run();
这使得线程顺序运行的,即,two.run();
将仅运行后one.run();
饰面。
伪码2:
thread one = new thread();
thread two = new thread();
one.start();
two.start();
在这种情况下,两个线程同时启动和运行。
的start()
方法调用run()
方法异步(犯规等待任何结果,只是触发了一个动作),但是当我们调用run()
,它运行同步,也就是说,它会等待直到run()
完成,然后才进到下一行代码。
0
in java Thread
总是在Stack Memory
中创建。当您创建一个新的线程时,它会在堆栈中占用新的内存。当你调用start()
方法它初始化新Stack Memory
,当你调用run()
方法它同样Stack Memory
初始化这就是为什么我们一直呼吁与start()
方法
一个
Thread
出于好奇:这是怎么了?为什么downvote? – 2010-03-10 10:38:10