1、 對(duì)比
-
繼承Thread
- 優(yōu)點(diǎn):可以直接使用Thread類中的方法饰剥,代碼簡(jiǎn)單
- 缺點(diǎn):因?yàn)镴ava是單繼承殊霞,所以繼承Thread之后就不能繼承其他的類
-
實(shí)現(xiàn)Runnable接口
- 優(yōu)點(diǎn):即自定義類已經(jīng)有了父類也不會(huì)受到影響,因?yàn)榭梢詫?shí)現(xiàn)多個(gè)接口
- 缺點(diǎn):在run方法內(nèi)部需要獲取到當(dāng)前線程的Thread對(duì)象后才能使用Thread中的方法
-
實(shí)現(xiàn)Callable接口
- 優(yōu)點(diǎn):可以獲取返回值汰蓉,可以拋出異常
- 缺點(diǎn):代碼編寫(xiě)較為復(fù)雜
2绷蹲、創(chuàng)建線程的兩種編碼方式
使用匿名內(nèi)部類創(chuàng)建線程
/*
* 使用匿名內(nèi)部類創(chuàng)建線程
*/
new Thread(new Runnable() { // 1.將Runnable的子類對(duì)象傳遞給Thread的構(gòu)造方法
public void run() { // 2.重寫(xiě)run方法
for (int i = 0; i < 1000; i++) { // 3.將要執(zhí)行的代碼寫(xiě)在run方法中
System.out.println("Runnable");
}
}
}).start(); // 4.開(kāi)啟線程
使用lambda表達(dá)式創(chuàng)建線程
//lambda寫(xiě)法
//因?yàn)門(mén)hread類中接收Runnable類型的對(duì)象,所以編譯器會(huì)識(shí)別出lambda表達(dá)式是Runnable對(duì)象
new Thread(() -> {
for (int i = 0; i < 1000; i++) { // 3.將要執(zhí)行的代碼寫(xiě)在run方法中
System.out.println("lambda");
}
}).start();