这可能是一个基本问题,我对此感到困惑,
在一个文件中,我是这样的:
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是否未创建线程?那是我的猜测…希望大家能更好地回答。谢谢
start()run()在新线程中运行代码。run()直接调用不会run()在新线程中执行,而是run()从中调用该线程。
start()
run()
如果run()直接调用,则没有线程。run()直接调用将阻塞,直到run()完成任何代码。 start()创建一个新线程,并且由于其中的代码run正在该新线程中运行,因此start()将立即返回。(嗯,从技术上讲,不是立即开始,而是在完成之后创建新线程并将其启动。)
run
另外,您应该实现可运行的,而不是扩展thread。