




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第分享Java多線程實現(xiàn)的四種方式以下四種方式:
1.繼承Thread類,重寫run方法2.實現(xiàn)Runnable接口,重寫run方法,實現(xiàn)Runnable接口的實現(xiàn)類的實例對象作為Thread構(gòu)造函數(shù)的target3.通過Callable和FutureTask創(chuàng)建線程4.通過線程池創(chuàng)建線程
后面兩種可以歸結(jié)成一類:有返回值,通過Callable接口,就要實現(xiàn)call方法,這個方法的返回值是Object,所以返回的結(jié)果可以放在Object對象中。
第一種:繼承Thread類,重寫該類的run()方法。
classMyThreadextendsThread{
privateinti=0;
@Override
publicvoidrun(){
for(i=0;i100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
publicclassThreadDemo1{
publicstaticvoidmain(String[]args){
for(inti=0;i100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
if(i==30){
//創(chuàng)建一個新的線程myThread1此線程進入新建狀態(tài)
ThreadmyThread1=newMyThread();
//創(chuàng)建一個新的線程myThread2此線程進入新建狀態(tài)
ThreadmyThread2=newMyThread();
//調(diào)用start()方法使得線程進入就緒狀態(tài)
myThread1.start();
//調(diào)用start()方法使得線程進入就緒狀態(tài)
myThread2.start();
}
如上所示,繼承Thread類,通過重寫run()方法定義了一個新的線程類MyThread,其中run()方法的方法體代表了線程需要完成的任務(wù),稱之為線程執(zhí)行體。當創(chuàng)建此線程類對象時一個新的線程得以創(chuàng)建,并進入到線程新建狀態(tài)。通過調(diào)用線程對象引用的start()方法,使得該線程進入到就緒狀態(tài),此時此線程并不一定會馬上得以執(zhí)行,這取決于CPU調(diào)度時機。
第二種:實現(xiàn)Runnable接口,并重寫該接口的run()方法。創(chuàng)建Runnable實現(xiàn)類的實例,并以此實例作為Thread類的target來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。
classMyRunnableimplementsRunnable{
privateinti=0;
@Override
publicvoidrun(){
for(i=0;i100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
publicclassThreadDemo2{
publicstaticvoidmain(String[]args){
for(inti=0;i100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
if(i==30){
//創(chuàng)建一個Runnable實現(xiàn)類的對象
RunnablemyRunnable=newMyRunnable();
//將myRunnable作為Threadtarget創(chuàng)建新的線程
Threadthread1=newThread(myRunnable);
Threadthread2=newThread(myRunnable);
//調(diào)用start()方法使得線程進入就緒狀態(tài)
thread1.start();
thread2.start();
}
第三種:使用Callable和Future接口創(chuàng)建線程。
1:創(chuàng)建Callable接口的實現(xiàn)類,并實現(xiàn)Call方法2:創(chuàng)建Callable實現(xiàn)類的實現(xiàn),使用FutureTask類包裝Callable對象,該FutureTask對象封裝了Callable對象的Call方法的返回值3:使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動線程4:調(diào)用FutureTask對象的get()來獲取子線程執(zhí)行結(jié)束的返回值\
publicclassThreadDemo3{
publicstaticvoidmain(String[]args){
//創(chuàng)建MyCallable對象
CallableIntegermyCallable=newMyCallable();
//使用FutureTask來包裝MyCallable對象
FutureTaskIntegerft=newFutureTaskInteger(myCallable);
for(inti=0;i100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
if(i==30){
//FutureTask對象作為Thread對象的target創(chuàng)建新的線程
Threadthread=newThread(ft);
//線程進入到就緒狀態(tài)
thread.start();
System.out.println("主線程for循環(huán)執(zhí)行完畢..");
try{
//取得新創(chuàng)建的新線程中的call()方法返回的結(jié)果
intsum=ft.get();
System.out.println("sum="+sum);
}catch(InterruptedExceptione){
e.printStackTrace();
}catch(ExecutionExceptione){
e.printStackTrace();
classMyCallableimplementsCallableInteger{
privateinti=0;
//與run()方法不同的是,call()方法具有返回值
@Override
publicIntegercall(){
intsum=0;
for(;i100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
sum+=i;
returnsum;
}
首先,我們發(fā)現(xiàn),在實現(xiàn)Callable接口中,此時不再是run()方法了,而是call()方法,此call()方法作為線程執(zhí)行體,同時還具有返回值!在創(chuàng)建新的線程時,是通過FutureTask來包裝MyCallable對象,同時作為了Thread對象的target。
第四種:通過線程池創(chuàng)建線程。
publicclassThreadDemo4{
//線程池數(shù)量
privatestaticintPOOL_NUM=10;
*@paramargs
*@throwsInterruptedException
publicstaticvoidmain(String[]args)throwsInterruptedException{
//TODOAuto-generatedmethodstub
ExecutorServiceexecutorService=Executors.newFixedThreadPool(5);
for(inti=0;iPOOL_NUM;i++){
RunnableThreadthread=newRunnableThread();
//Thread.sleep(1000);
executorService.execute(thread);
//關(guān)閉線程池
executorService.shutdown();
classRunnableThreadimplementsRunnable{
@Override
publicvoidrun(){
System.out.println("通過線程池方式創(chuàng)建的線程:"+Thread.currentThread().getName()+"");
}
ExecutorService、Callable都是屬于Executor框架。返回結(jié)果的線程是在JDK1.5中引入的新特征,還有F
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 解除公司托管協(xié)議書
- 空調(diào)服務(wù)維修協(xié)議書
- 美國簽訂京都協(xié)議書
- 財務(wù)人員交接協(xié)議書
- 經(jīng)濟發(fā)展與文化軟實力的互動試題及答案
- 加強全國文化建設(shè)的路徑探討及試題及答案
- 自駕公車安全協(xié)議書
- 聘請農(nóng)業(yè)管理協(xié)議書
- 結(jié)婚當天離婚協(xié)議書
- 終止租賃農(nóng)田協(xié)議書
- 2025年采煤機司機技能比賽理論考試題庫(共400題含答案)
- 中國網(wǎng)絡(luò)廣告行業(yè)十四五發(fā)展分析及投資前景與戰(zhàn)略規(guī)劃研究報告2025-2028版
- 2025年吉林省長春市中考一模歷史試題(原卷版+解析版)
- 2024-2025學(xué)年福建省泉州市晉江市安海中學(xué)等五校七年級(下)期中數(shù)學(xué)試卷
- 2025-2030中國建筑智能化工程行業(yè)市場發(fā)展分析及發(fā)展趨勢前景研究報告
- 2024年安徽演藝集團有限責任公司招聘筆試真題
- 天津2025年天津市面向昌都籍未就業(yè)少數(shù)民族高校畢業(yè)生招聘事業(yè)單位人員筆試歷年參考題庫附帶答案詳解
- 和醫(yī)院簽運營合同協(xié)議
- 2025-2030有機肥料產(chǎn)業(yè)市場深度調(diào)研及發(fā)展趨勢與投資前景研究報告
- 2025年人教版小學(xué)五年級下冊奧林匹克數(shù)學(xué)競賽測試卷(附參考答案)
- 2024年高考數(shù)學(xué)真題(北京卷)試題試卷原卷答案解析
評論
0/150
提交評論