在使用线程时需要java中的start方法

时间:2010-03-10 09:21:50

标签: java multithreading

为什么我们需要通过start方法运行线程而不是直接通过run方法运行?

4 个答案:

答案 0 :(得分:6)

run方法只在当前线程中执行线程的任务。从历史上看,您可以继承Thread并覆盖run - 尽管今天首选的机制是将Thread构造函数传递给Runnable。所以run本身不做任何线程 - 它是start创建一个新的“实际”线程(而不仅仅是Thread对象)并使其执行run()什么时候开始。

答案 1 :(得分:3)

因为run方法包含新线程应该执行的代码。

如果您要调用run方法,那么您只需在当前线程上执行它。

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

答案 2 :(得分:1)

start()方法告诉JVM它需要创建系统特定的线程。创建系统资源后,它会将Runnable对象传递给它以执行其run()方法。直接调用run()方法会使“Thread”在与调用对象相同的线程中执行,而不是按照预期在单独的执行线程中执行。

换句话说,调用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()完成,然后才进入下一行代码。

答案 3 :(得分:0)

java Thread中的

总是在Stack Memory中创建。当你创建一个新的Thread时,它会在Stack中占用新的内存。当你调用start()方法时,它会在新的{{1}中初始化当你调用Stack Memory方法时,它会在同一个run()中初始化 这就是为什么我们总是使用Stack Memory方法

来调用Thread