1. 繼承Thread類,重寫run方法,new出對象.start()即可。
public class Thread3 extends Thread{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(this.getName()+":"+i+"這是線程");
}
}
}
2. 實現Runnable接口,實現run方法,把實現類的對象obj傳給new Thread(obj),再用Thread 類的對象.start()方法來啟動線程。
public void run() {
for (int i = 0; i < 20; i++) {
String name = Thread.currentThread().getName();
System.out.println(name+":"+i);
}
}
public static void main(String[] args) {
Thread2 thread2 = new Thread2();
Thread thread = new Thread(thread2);
thread.start();
thread3.start();
注意:不能直接調用run方法,啟動線程必須使用start()方法,直接調用run方法是相當於直接調用普通方法
直接繼承Thread的可以用(Thread.currentThread()獲取當前運行的線程)或this.getName()/setName()方法來得到或者賦予一個線程名字。
實現runnable接口的用Thread.currentThread()獲取當前運行的線程或Thread.currentThread().getName()/setName()方法來得到或者賦予一個線程名字。這里沒有this。
區別:實現Runnable接口有何優點?
1. 解決了單繼承的問題,一個類只能繼承一個類,類繼承了Thread類之后就不能再繼承其他類了。實現Runnable接口,還可以繼承其他類,實現其他接口。
2. 增強了程序的擴展性,降低了程序的耦合性(解耦)
實現Runnable接口的方式,把設置線程任務和開啟線程進行了分離(解耦)。實現類中,重寫了run方法,用來設置線程任務,創建Thread類的對象,調用start方法,用來開啟新線程。
3.建議以后使用中用實現Runnable接口的方式