XmlSlurper
根据Java Doc
public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } }
接口定义了一个方法Runnable
,用于包含线程中执行的代码。 Runnable对象被传递给Thread构造函数。
那么,当我们执行HelloRunnable时,谁调用了内部运行方法?
在run
类中,Thread
方法如下所示:
start
从这段代码中,我们可以看到start方法没有调用public synchronized void start() {
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
start0();
if (stopBeforeStart) {
stop0(throwableFromStop);
}
}
方法。
答案 0 :(得分:7)
Java虚拟机调用此线程的
run
方法
因此,JVM的start0
中的本机代码负责在新创建的线程中调用run
。 (这并不是很意外,因为启动一个线程非常特定于操作系统,无法在纯Java中实现。)
注意:start0
不直接致电run
。相反(在高级视图中,忽略JVM内部管理),它指示操作系统创建一个新线程并让该线程执行run
。
只是为了澄清,这里是所涉及方法的简短描述:
start
是启动新Thread
的高级功能。
start0
是本机方法,它从操作系统创建新线程,并负责确保调用run
。
run
是Runnable
类中定义的方法。此方法将在新线程中执行。 Java中的Thread
对象本身不知道它应该执行的用户代码。这是关联的Runnable
对象的责任。
因此,当您致电Thread.start()
时,系统会自动调用run
的{{1}}方法。
当然,您始终可以明确调用Runnable
的{{1}}方法:
run
但是,这当然会在单独的线程中执行 not ,但会阻止执行。