2010-03-10 71 views

回答

3

由于run方法包含新线程应执行的代码。

如果您打电话给run方法,那么您只需在当前线程上执行它。

调用start启动新线程,然后在新线程上执行run方法

+0

一个Thread出于好奇:这是怎么了?为什么downvote? – 2010-03-10 10:38:10

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()方法