Bha*_*kar 6 java multithreading
好的,我知道创建新线程并在Java中运行它的两种标准方法:
Runnable在类中实现,定义run()方法,并将类的实例传递给新的Thread.当start()上线实例方法被调用时,类实例的run方法被调用.
让类派生自Thread,因此它可以覆盖该方法run(),然后在start()调用新实例的方法时,将调用路由到重写方法.
在这两种方法中,基本上Thread都会创建一个新对象并调用其start方法.但是,在第二种方法中,调用被路由到用户定义run()方法的机制非常清楚(这是一个简单的运行时多态性),我不明白如何调用start()Thread对象上的方法被路由到run()类实现Runnable接口的方法.Thread该类是否具有Runnable首先检查的类型的私有字段,如果已设置,则在设置为对象时调用run方法?这将是一个奇怪的机制IMO.
如何start()将线程上的调用路由到Runnable类的实现的接口的run方法,该类的对象在构造线程时作为参数传递?
在Thread保持对参考Runnable实例,并在基实现的调用它run.
你可以在源代码中看到这个:
// passed into the constructor and set in the init() method
private Runnable target;
...
// called from native thread code after start() is called
public void run() {
if (target != null) {
target.run();
}
}
Run Code Online (Sandbox Code Playgroud)