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,而不是扩展线程.