Java 并發(fā)編程中如何創(chuàng)建線程
簡介
線程是基本的調(diào)度單位,它被包含在進程之中,是進程中的實際運作單位,它本身是不會獨立存在。一個進程至少有一個線程,進程中的多個線程共享進程的資源。
Java中創(chuàng)建線程的方式有多種如繼承Thread類、實現(xiàn)Runnable接口、實現(xiàn)Callable接口以及使用線程池的方式,線程池將在后面文章中單獨介紹,這里先介紹另外三種方式。
繼承Thread類
優(yōu)點:在run方法里可以用this獲取到當(dāng)前線程。
缺點:由于Java不支持多繼承,所以如果繼承了Thread類后就不能再繼承其他類。
public class MyThread extends Thread {
/**
* 線程要執(zhí)行的任務(wù)
*/
@Override
public void run() {
System.out.println("do something...");
}
public static void main(String[] args) {
//創(chuàng)建線程
MyThread myThread = new MyThread();
//啟動線程
myThread.start();
}
}
實現(xiàn)Runnable接口
優(yōu)點:實現(xiàn)Runnable接口后不影響繼承其他類,以及有利于多個線程資源共享。
缺點:獲取當(dāng)前線程需要調(diào)用Thread.currentThread()。
public class MyThread implements Runnable {
/**
* 線程要執(zhí)行的任務(wù)
*/
@Override
public void run() {
System.out.println("do something...");
}
public static void main(String[] args) {
//創(chuàng)建兩個線程,并指定相同的任務(wù)
Thread thread1 = new Thread(new MyThread());
Thread thread2 = new Thread(new MyThread());
//啟動線程
thread1.start();
thread2.start();
}
}
實現(xiàn)Callable接口
優(yōu)缺點類似于實現(xiàn)Runnable接口,但是實現(xiàn)Callable接口可以有返回值。
public class MyThread implements Callable<String> {
/**
* 線程要執(zhí)行的任務(wù),并且具有返回值
*/
@Override
public String call() throws Exception {
System.out.println("do something...");
Thread.sleep(3000);
return "我是返回值";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
//創(chuàng)建異步任務(wù)
FutureTask<String> futureTask = new FutureTask(new MyThread());
//啟動線程
new Thread(futureTask).start();
//阻塞等待線程執(zhí)行完成并返回結(jié)果
String result = futureTask.get();
System.out.println(result);
}
}
以上就是Java 并發(fā)編程中如何創(chuàng)建線程的詳細內(nèi)容,更多關(guān)于Java 創(chuàng)建線程的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊管理
這篇文章主要介紹了為大家AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊管理源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Java 11 正式發(fā)布,這 8 個逆天新特性教你寫出更牛的代碼
美國當(dāng)?shù)貢r間9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發(fā)布,可在生產(chǎn)環(huán)境中使用!這是自 Java 8 后的首個長期支持版本2018-09-09
JDK生成WebService客戶端代碼以及調(diào)用方式
WebService 是一種跨編程語言和跨操作系統(tǒng)平臺的遠程調(diào)用技術(shù),下面這篇文章主要給大家介紹了關(guān)于JDK生成WebService客戶端代碼以及調(diào)用方式的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08
SpringSession會話管理之Redis與JDBC存儲實現(xiàn)方式
本文將詳細介紹Spring Session的核心概念、特性以及如何使用Redis和JDBC來實現(xiàn)會話存儲,幫助開發(fā)者構(gòu)建更加健壯和可擴展的應(yīng)用系統(tǒng),希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
如何獲取springboot打成jar后的classpath
這篇文章主要介紹了如何獲取springboot打成jar后的classpath問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

