三種創(chuàng)建方式
一:繼承Thread方式
class ThreadA extends Thread{
@Override
public void run(){
System.out.println("通過 繼承Thread類 方式實現(xiàn) ")
}
}
二:實現(xiàn)Runnable接口
class ThreadB implements Runnable{
@Override
public void run(){
System.out.println("通過 實現(xiàn)Runnable接口 方式實現(xiàn) ")
}
}
三:實現(xiàn)Callable接口實現(xiàn)
class ThreadC implements Callable<String>{
@Override
public String call() {
System.out.println("通過 實現(xiàn)Callable接口 方式實現(xiàn) ")
return "success";
}
}
調用示例
public class ThreadTest{
public static void main(String [] args){
//ThreadA
Thread t1 = new Thread(new ThreadA());
t1.start();
//ThreadB
Thread t2 = new Thread(new ThreadB());
t2.start();
//ThreadC
ThreadC test = new ThreadC();
FutureTask<String> futureTask = new FutureTask<String>(test);
Thread t3 = new Thread(futureTask);
t3.start();
try {
//獲取返回call方法結果
String result = futureTask.get(1, TimeUnit.SECONDS);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
三種創(chuàng)建方式比較
繼承創(chuàng)建線程的缺陷是受java單繼承的影響犁罩,如果一個線程繼承了Thread類,就無法繼承其他類,不利于業(yè)務邏輯處理,并且Thread類其實也是實現(xiàn)了Runnable接口的
Callable和Runnale的區(qū)別
1.Runnable執(zhí)行方法是run(),Callable是call()
2.實現(xiàn)Runnable接口的任務線程無返回值;Callable接口支持返回執(zhí)行結果,此時需要調用FutureTask.get(long time, TimeUnit unit)方法實現(xiàn),此方法會阻塞主線程直到獲取子線程執(zhí)行完的結果液南;當不調用此方法時,主線程不會阻塞
3.call方法可以拋出異常勾徽,run方法若有異常只能在內部消化滑凉。
原創(chuàng),轉載請著名出處喘帚!