我们不能直接在线程的对象上调用Runnable的run()方法,但根据下面的程序,我们没有任何编译或运行时错误。为什么会这样?
public class ThreadCheck implements Runnable {
@Override
public void run() {
for (int i=0; i<10; ) {
System.out.println(++i);
}
}
public static void main(String[] args) {
Thread mythread = new Thread(new ThreadCheck());
mythread.run();
mythread.run();
mythread.start();
}
}
输出: 1 2 3 4 五 6 7 8 9 10 1 2 3 4 五 6 7 8 9 10 1 2 3 4 五 6 7 8 9 10
答案 0 :(得分:7)
这不会有任何编译或运行时错误。但它也不会产生新的线程。它将在当前主线程中执行run()
方法。
答案 1 :(得分:1)
我们可以直接在线程的对象上调用Runnable的run()
方法。但是,当您从线程的对象中调用run()
方法时,run()
方法将作为常规方法工作。当你调用它时,它不会创建一个新线程。
在这种情况下,run()
方法将被视为普通方法调用。但是当您在start()
对象上调用Thread
方法时,它会自动调用run()
中新线程上的JVM
方法。
答案 2 :(得分:0)
要创建/生成自定义新线程,需要做两件事:
使用参数作为对象创建一个新的Thread对象(称之为线程) 自定义线程的引用(本例中为myThread)
致电thread.start();
run()
可以直接调用,但是序列 run方法中的执行不会在新线程中发生!该 执行顺序将在main方法的现有线程中进行。
答案 3 :(得分:0)
我们不能直接在线程的对象上调用Runnable的run()方法
事实并非如此。您的示例证明您可以调用它。但也许它没有按照你的想法做到。
有关Thread
类与Runnable
界面之间关系的简单说明,请参阅Two thread which invokes wait and notify。