您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)怎么在Java項(xiàng)目中創(chuàng)建一個(gè)多線程,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
java有以下四種創(chuàng)建多線程的方式
1:繼承Thread類創(chuàng)建線程
2:實(shí)現(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)建線程的三種方式的對(duì)比
1、采用實(shí)現(xiàn)Runnable、Callable接口的方式創(chuàng)建多線程
優(yōu)勢:
線程類只是實(shí)現(xiàn)了Runnable接口或Callable接口,還可以繼承其他類。
在這種方式下,多個(gè)線程可以共享同一個(gè)target對(duì)象,所以非常適合多個(gè)相同線程來處理同一份資源的情況,從而可以將CPU、代碼和數(shù)據(jù)分開,形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/p>
劣勢:
編程稍微復(fù)雜,如果要訪問當(dāng)前線程,則必須使用Thread.currentThread()方法。
2、使用繼承Thread類的方式創(chuàng)建多線程
優(yōu)勢:
編寫簡單,如果需要訪問當(dāng)前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當(dāng)前線程。
劣勢:
線程類已經(jīng)繼承了Thread類,所以不能再繼承其他父類。
3、Runnable和Callable的區(qū)別
Runnable接口定義的run方法,Callable定義的是call方法。
run方法沒有返回值,call方法必須有返回值。
run方法無法拋出異常,call方法可以拋出checked exception。
Callable和Runnable都可以應(yīng)用于executors。而Thread類只支持Runnable.
上述就是小編為大家分享的怎么在Java項(xiàng)目中創(chuàng)建一個(gè)多線程了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。