小编典典

通过调用start()和run()运行线程,有什么区别?

java

这可能是一个基本问题,我对此感到困惑,

在一个文件中,我是这样的:

public class MyThread extends Thread {
    @Override
    public void run() {
        //stuffs
    }
}

现在在另一个文件中我有这个:

public class Test {
    public static void main(String[] args) {
        Thread obj = new MyThread();

        //now cases where i got confused
        //case 1
        obj.start();   //it makes the run() method run
        //case 2
        obj.run();     //it is also making run() method run
    }
}

所以在上面两种情况之间有什么区别,情况1是否正在创建新线程,情况2是否未创建线程?那是我的猜测…希望大家能更好地回答。谢谢


阅读 225

收藏
2020-09-28

共1个答案

小编典典

start()run()在新线程中运行代码。run()直接调用不会run()在新线程中执行,而是run()从中调用该线程。

如果run()直接调用,则没有线程。run()直接调用将阻塞,直到run()完成任何代码。
start()创建一个新线程,并且由于其中的代码run正在该新线程中运行,因此start()将立即返回。(嗯,从技术上讲,不是立即开始,而是在完成之后创建新线程并将其启动。)

另外,您应该实现可运行的,而不是扩展thread

2020-09-28