Java 并發(fā)編程中如何創(chuàng)建線程
簡(jiǎn)介
線程是基本的調(diào)度單位,它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位,它本身是不會(huì)獨(dú)立存在。一個(gè)進(jìn)程至少有一個(gè)線程,進(jìn)程中的多個(gè)線程共享進(jìn)程的資源。
Java中創(chuàng)建線程的方式有多種如繼承Thread類、實(shí)現(xiàn)Runnable接口、實(shí)現(xiàn)Callable接口以及使用線程池的方式,線程池將在后面文章中單獨(dú)介紹,這里先介紹另外三種方式。
繼承Thread類
優(yōu)點(diǎn):在run方法里可以用this獲取到當(dāng)前線程。
缺點(diǎn):由于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();
//啟動(dòng)線程
myThread.start();
}
}
實(shí)現(xiàn)Runnable接口
優(yōu)點(diǎn):實(shí)現(xiàn)Runnable接口后不影響繼承其他類,以及有利于多個(gè)線程資源共享。
缺點(diǎn):獲取當(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)建兩個(gè)線程,并指定相同的任務(wù)
Thread thread1 = new Thread(new MyThread());
Thread thread2 = new Thread(new MyThread());
//啟動(dòng)線程
thread1.start();
thread2.start();
}
}
實(shí)現(xiàn)Callable接口
優(yōu)缺點(diǎn)類似于實(shí)現(xiàn)Runnable接口,但是實(shí)現(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());
//啟動(dòng)線程
new Thread(futureTask).start();
//阻塞等待線程執(zhí)行完成并返回結(jié)果
String result = futureTask.get();
System.out.println(result);
}
}
以上就是Java 并發(fā)編程中如何創(chuàng)建線程的詳細(xì)內(nèi)容,更多關(guān)于Java 創(chuàng)建線程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot使用Validator校驗(yàn)方式
這篇文章主要介紹了springboot使用Validator校驗(yàn)方式,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01
IDEA新建bootstrap.yml文件不顯示葉子圖標(biāo)的問(wèn)題
這篇文章主要介紹了IDEA新建bootstrap.yml文件不顯示葉子圖標(biāo)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Java Calendar類使用總結(jié)及使用實(shí)例
這篇文章主要介紹了Java Calendar類使用總結(jié)及使用實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作
這篇文章主要介紹了SpringBoot停止啟動(dòng)時(shí)測(cè)試檢查rabbitmq操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java二分法查找_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java二分法查找的相關(guān)資料,需要的朋友可以參考下2017-04-04
做java這么久了居然還不知道JSON的使用(一文帶你了解)
這篇文章主要介紹了做java這么久了居然還不知道JSON的使用(一文帶你了解),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list
這篇文章主要介紹了Java8 實(shí)現(xiàn)stream將對(duì)象集合list中抽取屬性集合轉(zhuǎn)化為map或list的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02

