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

And*_*ler 2 java multithreading

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

在一个文件中,我喜欢这样:

public class MyThread extends Thread {
    @Override
    public void run() {
        //stuffs
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

所以在上面两种情况之间有什么区别,是情况1是创建一个新线程而情况2是不是创建一个线程?这是我的猜测...希望能更好地回答那些伙计们.谢​​谢

Cor*_*bin 17

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

如果你run()直接打电话,你就不是线程.run()直接调用将阻塞,直到run()完成任何代码. start()创建一个新线程,并且由于代码run在该新线程中运行,因此start()立即返回.(好吧,技术上不是立即,而是在完成创建新线程并将其踢掉之后.)

此外,您应该实现runnable,而不是扩展线程.