您好,登錄后才能下訂單哦!
java創建線程的方式有哪些?針對這個問題,今天小編總結這篇有關java創建線程的文章,希望能幫助更多想解決這個問題的朋友找到更加簡單易行的辦法。
好處:
(1)與使用Runnable相比,Callable功能更強大些
(2)相比run()方法,可以有返回值
(3)方法可以拋出異常
(4)支持泛型的返回值
(5)需要借助FutureTask類,比如獲取返回結果
Future接口:
1)可以對具體的Runnable\Callable任務的執行結果進行取消、查詢是否完成、獲取結果等
2)FutureTask是Future接口唯一的實現類
3)FutureTask同時實現了Runnable,Future接口。
【它既可以作為Runnable被線程執行,又可以作為Future得到Callable的返回值】
//1.創建實現類
class NumThread implements Callable {
//2.重寫call()方法
@Override
public Object call() throws Exception {
int sum=0;
for(int i=1;i<=100;i++){
if(i%2==0){
System.out.println(i);
sum+=i;
}
}
return sum;
}
}
public class ThreadNew {
public static void main(String[] args) {
//3.創建實現Callable接口的實例對象
NumThread numThread = new NumThread();
//4.將實現類的對象作為參數傳遞到FutureTask構造器,創建 FutureTask對象
FutureTask futureTask = new FutureTask(numThread);
//5.將FutureTask的對象作為參數傳遞到Thread類的構造器中,并調用start()
new Thread(futureTask).start();
//6.需要的話,可以借助FutureTask的對象進行一系列操作
try {
//get()返回值為FutureTask構造器參數Callable實現類重寫的call()的返回值
Object sum = futureTask.get();
System.out.println("總和:"+sum);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
好處:
1)提高響應速度--減少創建新線程的時間
2)降低資源消耗--重復利用線程池中的線程,不需要每次都創建
3)便于線程管理:
corePoolSize:核心池的大小
maximumPoolSize:最大線程數
keepAliveTime:線程沒有任務時最多保持多長時間會終止
線程池相關API--ExecutorService和Executors
ExecutorService:真正的線程池接口,常見子類ThreadPoolExecutor
Executors:工具類、線程池的工廠類。用于創建并返回不同類型的線程池
綜上所述,創建線程的兩種方式各有各的優點,具體使用還要根據自己情況選擇其中一種方式,如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。