从我在Java中使用线程的时间开始,我发现了这两种编写线程的方法:
用implements Runnable:
public class MyRunnable implements Runnable {
public void run() {
//Code
}
}
//Started with a "new Thread(new MyRunnable()).start()" call
Run Code Online (Sandbox Code Playgroud)
或者,用extends Thread:
public class MyThread extends Thread {
public MyThread() {
super("MyThread");
}
public void run() {
//Code
}
}
//Started with a "new MyThread().start()" call
Run Code Online (Sandbox Code Playgroud)
这两个代码块有什么显着差异吗?
假设我有一个扩展Thread的类.
所以从目前为止我所知道的:
在run()直接调用时,该方法被视为普通方法,并且不会导致JVM为其创建新线程.
为了让它按预期工作,start()必须调用该run()方法,然后在某些操作系统暗淡的juju魔法发生之后调用该方法.
我的问题是:
是否有人可以超载start()/run()并保持正常行为?
注意:你错误的好奇心是愚蠢的,不需要粗鲁.
不确定我是否正确行事.我需要创建一个新线程来写出一定次数的消息.我认为这种方法到目前为止还不确定它是否是最好的方法.然后我需要在线程完成运行后显示另一条消息.我怎么做 ?使用isAlive()?我该如何实现?
public class MyThread extends Thread {
public void run() {
int i = 0;
while (i < 10) {
System.out.println("hi");
i++;
}
}
public static void main(String[] args) {
String n = Thread.currentThread().getName();
System.out.println(n);
Thread t = new MyThread();
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)