1.java實作多線程有幾種方法?
2種 根據Oracle的官方說明。
方法一:實作Runnable接口
方法二:繼承Thread類
方法一:
#實作Runnable接口
public class RunnableStyle implements Runnable {
public static void main(String[] args) {
Thread thread1 = new Thread(new RunnableStyle());
thread1.start();
}
@Override
public void run() {
System.out.println("用Runnable實作線程");
}
}
方法二:
package threadcoreknowledge.createthreads;
public class ThreadStyle extends Thread {
@Override
public void run(){
System.out.println("用Thread類實作線程");
}
public static void main(String[] args) {
Thread a = new Thread();
a.start();
}
}
這兩種實作那種更好?
方法一的run
/* What will be run. */
//實作Runnable 會在構造函數是将這個實作的對象初始化
private Runnable target;
@Override
public void run() {
if (target != null) {
target.run();
}
}
方法二和方法一緻 但是實作繼承 會覆寫run方法
@Override
public void run() {
if (target != null) {
target.run();
}
}
同時繼承 Thread 和實作 Runnable 接口
public class BothRunnableThread {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我來自Runable");
}
}){
@Override
public void run() {
System.out.println("我來自Thread");
}
}.start();
}
}
console:
我來自Thread
為什麼輸出的是我來自Thread?
因為在實作Thread時也重寫了run方法。