詳解Java創(chuàng)建多線程的四種方式以及優(yōu)缺點
java有以下四種創(chuàng)建多線程的方式
1:繼承Thread類創(chuàng)建線程
2:實現(xiàn)Runnable接口創(chuàng)建線程
3:使用Callable和FutureTask創(chuàng)建線程
4:使用線程池,例如用Executor框架創(chuàng)建線程
DEMO代碼
package thread;
import java.util.concurrent.*;
public class ThreadTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 創(chuàng)建線程的第一種方法
Thread1 thread1 = new Thread1();
thread1.start();
// 創(chuàng)建線程的第二種方法
Thread2 thread2 = new Thread2();
Thread thread = new Thread(thread2);
thread.start();
// 創(chuàng)建線程的第三種方法
Callable<String> callable = new Thread3();
FutureTask<String> futureTask = new FutureTask<>(callable);
Thread thread3 = new Thread(futureTask);
thread3.start();
String s = futureTask.get();
System.out.println(s);
// 創(chuàng)建線程的第四種方法
Executor executor = Executors.newFixedThreadPool(5);
executor.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread()+"創(chuàng)建線程的第四種方法");
}
});
((ExecutorService) executor).shutdown();
}
}
class Thread1 extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread()+"創(chuàng)建線程的第一種方法");
}
}
class Thread2 implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread()+"創(chuàng)建線程的第二種方法");
}
}
class Thread3 implements Callable<String> {
@Override
public String call() throws Exception {
return Thread.currentThread()+"創(chuàng)建線程的第三種方法";
}
}
創(chuàng)建線程的三種方式的對比
1、采用實現(xiàn)Runnable、Callable接口的方式創(chuàng)建多線程
優(yōu)勢:
線程類只是實現(xiàn)了Runnable接口或Callable接口,還可以繼承其他類。
在這種方式下,多個線程可以共享同一個target對象,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU、代碼和數(shù)據(jù)分開,形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/p>
劣勢:
編程稍微復雜,如果要訪問當前線程,則必須使用Thread.currentThread()方法。
2、使用繼承Thread類的方式創(chuàng)建多線程
優(yōu)勢:
編寫簡單,如果需要訪問當前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當前線程。
劣勢:
線程類已經(jīng)繼承了Thread類,所以不能再繼承其他父類。
3、Runnable和Callable的區(qū)別
Runnable接口定義的run方法,Callable定義的是call方法。
run方法沒有返回值,call方法必須有返回值。
run方法無法拋出異常,call方法可以拋出checked exception。
Callable和Runnable都可以應用于executors。而Thread類只支持Runnable.
總結(jié)
鑒于上面分析,因此一般推薦采用實現(xiàn)Runnable接口、Callable接口的方式來創(chuàng)建多線程。
到此這篇關于Java創(chuàng)建多線程的四種方式以及優(yōu)缺點的文章就介紹到這了,更多相關Java創(chuàng)建多線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot3整合Nacos?V2.3.2的詳細過程
本文介紹了如何在?Spring?Boot?3.2.x?項目中整合?Nacos?2.3.2,包括依賴配置、Nacos?服務發(fā)現(xiàn)與動態(tài)配置的配置方法,通過整合?Nacos,Spring?Boot?應用可以實現(xiàn)高效的服務發(fā)現(xiàn)、動態(tài)配置管理以及分布式系統(tǒng)中的靈活擴展,感興趣的朋友跟隨小編一起看看吧2024-11-11
idea +junit單元測試獲取不到bean注入的解決方式
這篇文章主要介紹了idea +junit單元測試獲取不到bean注入的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

