



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
JAVA多線程實現(xiàn)和應(yīng)用總結(jié) 最近在做代碼優(yōu)化時學(xué)習(xí)和研究了下JAVA多線程的使用,看了菜鳥們的見解后做了下總結(jié)。1.JAVA多線程實現(xiàn)方式JAVA多線程實現(xiàn)方式主要有三種:繼承Thread類、實現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒有返回值,只有最后一種是帶返回值的。2.繼承Thread類實現(xiàn)多線程繼承Thread類的方法盡管被我列為一種多線程實現(xiàn)方式,但Thread本質(zhì)上也是實現(xiàn)了Runnable接口的一個實例,它代表一個線程的實例,并且,啟動線程的唯一方法就是通過Thread類的start()實例方法。start()方法是一個native方法,它將啟動一個新線程,并執(zhí)行run()方法。這種方式實現(xiàn)多線程很簡單,通過自己的類直接extend Thread,并復(fù)寫run()方法,就可以啟動新線程并執(zhí)行自己定義的run()方法。例如:public class MyThread extends Thread public void run() System.out.println(MyThread.run();在合適的地方啟動線程如下:MyThread myThread1 = new MyThread();MyThread myThread2 = new MyThread();myThread1.start();myThread2.start();3.實現(xiàn)Runnable接口方式實現(xiàn)多線程如果自己的類已經(jīng)extends另一個類,就無法直接extends Thread,此時,必須實現(xiàn)一個Runnable接口,如下:public class MyThread extends OtherClass implements Runnable public void run() System.out.println(MyThread.run();為了啟動MyThread,需要首先實例化一個Thread,并傳入自己的MyThread實例:MyThread myThread = new MyThread();Thread thread = new Thread(myThread);thread.start();事實上,當(dāng)傳入一個Runnable target參數(shù)給Thread后,Thread的run()方法就會調(diào)用target.run(),參考JDK源代碼:public void run() if (target != null) target.run();4.使用ExecutorService、Callable、Future實現(xiàn)有返回結(jié)果的多線程ExecutorService、Callable、Future這個對象實際上都是屬于Executor框架中的功能類。想要詳細(xì)了解Executor框架的可以訪問/topic/366591,這里面對該框架做了很詳細(xì)的解釋。返回結(jié)果的線程是在JDK1.5中引入的新特征,確實很實用,有了這種特征我就不需要再為了得到返回值而大費周折了,而且即便實現(xiàn)了也可能漏洞百出??煞祷刂档娜蝿?wù)必須實現(xiàn)Callable接口,類似的,無返回值的任務(wù)必須Runnable接口。執(zhí)行Callable任務(wù)后,可以獲取一個Future的對象,在該對象上調(diào)用get就可以獲取到Callable任務(wù)返回的Object了,再結(jié)合線程池接口ExecutorService就可以實現(xiàn)傳說中有返回結(jié)果的多線程了。下面提供了一個完整的有返回結(jié)果的多線程測試?yán)?,在JDK1.5下驗證過沒問題可以直接使用。代碼如下:import java.util.concurrent.*;import java.util.Date;import java.util.List;import java.util.ArrayList;/* Java線程:有返回值的線程* * author wb_qiuquan.ying*/SuppressWarnings(unchecked)public class Test public static void main(String args) throws ExecutionException, InterruptedException System.out.println(-程序開始運行-); Date date1 = new Date(); int taskSize = 5; / 創(chuàng)建一個線程池 ExecutorService pool = Executors.newFixedThreadPool(taskSize); / 創(chuàng)建多個有返回值的任務(wù) List list = new ArrayList(); for (int i = 0; i + f.get().toString(); list.add(f); / 關(guān)閉線程池 pool.shutdown(); / 獲取所有并發(fā)任務(wù)的運行結(jié)果 for (Future f : list) / 從Future對象上獲取任務(wù)的返回值,并輸出到控制臺 System.out.println( + f.get().toString(); Date date2 = new Date(); System.out.println(-程序結(jié)束運行-,程序運行時間【 + (date2.getTime() - date1.getTime() + 毫秒】);class MyCallable implements Callable private String taskNum;MyCallable(String taskNum) this.taskNum = taskNum;public Object call() throws Exception System.out.println( + taskNum + 任務(wù)啟動); Date dateTmp1 = new Date(); Thread.sleep(1000); Date dateTmp2 = new Date(); long time = dateTmp2.getTime() - dateTmp1.getTime(); System.out.println( + taskNum + 任務(wù)終止); return taskNum + 任務(wù)返回運行結(jié)果,當(dāng)前任務(wù)時間【 + time + 毫秒】;代碼說明:上述代碼中Executors類,提供了一系列工廠方法用于創(chuàng)先線程池,返回的線程池都實現(xiàn)了ExecutorService接口。public static ExecutorService newFixedThreadPool(int nThreads) 創(chuàng)建固定數(shù)目線程的線程池。public static ExecutorService newCachedThreadPool() 創(chuàng)建一個可緩存的線程池,調(diào)用execute 將重用以前構(gòu)造的線程(如果線程可用)。如果現(xiàn)有線程沒有可用的,則創(chuàng)建一個新線程并添加到池中。終止并從緩存中移除那些已有 60 秒鐘未被使用的線程。public static ExecutorService newSingleThreadExecutor() 創(chuàng)建一個單線程化的Executor。public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年十大公務(wù)員培訓(xùn)機構(gòu)排行與選擇指南
- 《腦膜炎的護理》課件
- 沙場借用協(xié)議書
- 車輛轉(zhuǎn)租欠款合同協(xié)議
- 車輛置換買賣合同協(xié)議
- 母女友好協(xié)議書
- 車位銷售合同協(xié)議書模板
- 道路工程修路合同協(xié)議
- 債權(quán)擔(dān)保合同協(xié)議書
- 《手相與健康》課件
- 歌曲版權(quán)轉(zhuǎn)讓協(xié)議書樣式9篇
- 2025時政試題及答案(100題)
- 電力系統(tǒng)的穩(wěn)定性分析試題庫及答案解析
- 《把水變干凈》幼兒園大班科學(xué)課件
- 減震器知識培訓(xùn)課件圖片
- 燒燙傷健康宣教
- 醫(yī)院門診院感制度
- 2025固體礦產(chǎn)地質(zhì)調(diào)查規(guī)范1:25000
- 2025-2030中國具身智能行業(yè)研發(fā)創(chuàng)新策略與未來前景展望報告
- 臺球俱樂部創(chuàng)業(yè)計劃書
- 2025年入團積極分子培訓(xùn)考試題庫及答案
評論
0/150
提交評論