


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、9C7"商學堂中國IT疲疆徒樓冼屈牌400-009-1906線程池的原理與實現簡單介紹創建線程有兩種方式:繼承Thread或實現Runnable。Thread實現了Runnable接口,提供了一個空的run()方法,所以不論是繼承Thread還是實現Runnable,都要有自己的run()方法。一個線程創建后就存在,調用start()方法就開始運行(執行run()方法),調用wait進入等待或調用sleep進入休眠期,順利運行完畢或休眠被中斷或運行過程中岀現異常而退岀。wait和sleep比較:sleep方法有:sleep(longmillis),sleep(longmillis,l
2、ongnanos),調用sleep方法后,當前線程進入休眠期,暫停執行,但該線程繼續擁有監視資源的所有權。到達休眠時間后線程將繼續執行,直到完成。若在休眠期另一線程中斷該線程,則該線程退岀。wait方法有:wait(),wait(longtimeout),wait(longtimeout,longnanos),調用wait方法后,該線程放棄監視資源的所有權進入等待狀態;wait():等待有其它的線程調用notify()或notifyAll()進入調度狀態,與其它線程共同爭奪監視。wait()相當于wait(0),wait(0,0)。wait(longtimeout):當其它線程調用notify
3、()或notifyAII(),或時間到達timeout亳秒,或有其它某線程中斷該線程,則該線程進入調度狀態。wait(longtimeout,longnanos):相當于wait(1000000*timeout+nanos),只不過時間單位為納秒。線程池:多線程技術主要解決處理器單元內多個線程執行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。假設一個服務器完成一項任務所需時間為:T1創建線程時間,T2在線程中執行任務的時間,T3銷毀線程時間。如果:T1+T3遠大于T2,則可以采用線程池,以提高服務器性能。一個線程池包括以下四個基本組成部分:1、線程池管理器(Thread
4、Pool):用于創建并管理線程池,包括創建線程池,銷毀線程池,添加新任務;2、工作線程(PoolWorker):線程池中線程,在沒有任務時處于等待狀態,可以循環的執行任務;3、任務接口(Task):每個任務必須實現的接口,以供工作線程調度任務的執行,它主要規定了任務的入口,任務執行完后的收尾工作,任務的執行狀態等;4、任務隊列(taskQueue):用于存放沒有處理的任務。提供一種緩沖機制。線程池技術正是關注如何縮短或調整T1,T3時間的技術,從而提高服務器程序性能的。它把T1,T3分別安排在服務器程序的啟動和結束的時間段或者一些空閑的時間段,這樣在服務器程序處理客戶請求時,北京尚學堂-cct
5、v央視網廣告合作伙伴,專業IT培訓機構,口碑最好的java培訓、,iOS培訓,android培訓,hadoop大數據培訓,web前端培訓機構,0元入學,先就業后付款,平均就業薪水9500以上衆兀學呈400-009-1906不會有T1,T3的開銷了。線程池不僅調整T1,T3產生的時間段,而且它還顯著減少了創建線程的數目,看一個例子:假設一個服務器一天要處理50000個請求,并且每個請求需要一個單獨的線程完成。在線程池中,線程數一般是固定的,所以產生線程總數不會超過線程池中線程的數目,而如果服務器不利用線程池來處理這些請求則線程總數為50000。一般線程池大小是遠小于50000。所以利用線程池的服
6、務器程序不會為了創建50000而在處理請求時浪費時間,從而提高效率。好了,廢話就到這里了,下面就是程序了,我也不講解了,注釋已經很清晰了:/*線程池類,工作線程作為其內部類*/packageorg.ymcn.util;importjava.util.Collections;importjava.util.Date;importjava.util.LinkedList;importjava.util.List;importorg.apache.log4j.Logger;/*線程池*創建線程池,銷毀線程池,添加新任務*authorobullxlpublicfinalclassThreadPoolp
7、rivatestaticLoggerlogger=Logger.getLogger(ThreadPool.class);privatestaticLoggertaskLogger=Logger.getLogger("TaskLogger");privatestaticbooleandebug=taskLogger.isDebugEnabled();/privatestaticbooleandebug=taskLogger.islnfoEnabled();/*單例*/privatestaticThreadPoolinstance=ThreadPool.getInstance(
8、);publicstaticfinalintSYSTEM_BUSY_TASK_COUNT=150;/*默認池中線程數*/publicstaticintworker_num=5;/*已經處理的任務數*/privatestaticinttaskCounter=0;publicstaticbooleansystemIsBusy=false;privatestaticList<Task>taskQueue=Collections.synchronizedList(newLinkedList<Task>();/*池中的所有線程*/publicPoolWorkerworkers;p
9、rivateThreadPool()workers=newPoolWorker5;for(inti=0;i<workers.length;i+)北京尚學堂-cctv央視網廣告合作伙伴,專業IT培訓機構,口碑最好的java培訓、,iOS培訓,android培訓,hadoop大數據培訓,web前端培訓機構,0元入學,先就業后付款,平均就業薪水9500以上workersi=newPoolWorker(i);privateThreadPool(intpool_worker_num)worker_num=pool_worker_num;workers=newPoolWorkerworker_num
10、;for(inti=0;i<workers.length;i+)workersi=newPoolWorker(i);publicstaticsynchronizedThreadPoolgetInstance()if(instance=null)returnnewThreadPool();returninstance;/*增加新的任務*每增加一個新任務,都要喚醒任務隊列*paramnewTask*/publicvoidaddTask(TasknewTask)synchronized(taskQueue)newTask.setTaskld(+taskCounter);newTask.setS
11、ubmitTime(newDate();taskQueue.add(newTask);/*喚醒隊列,開始執行*/taskQueue.notifyAII();("SubmitTask<"+newTask.getTaskId()+">:"+newT();/*批量增加新任務*paramtaskes*/publicvoidbatchAddTask(Tasktaskes)if(taskes=null|taskes.length=0)return;synchronized(taskQueue)for(inti=0;i
12、<taskes.length;i+)北京尚學堂-cctv央視網廣告合作伙伴,專業IT培訓機構,口碑最好的java培訓、,iOS培訓,android培訓,hadoop大數據培訓,web前端培訓機構,0元入學,先就業后付款,平均就業薪水9500以上if(taskesi=null)continue;taskesi.setTaskld(+taskCounter);taskesi.setSubmitTime(newDate();taskQueue.add(taskesi);/*喚醒隊列,開始執行*/taskQueue.notifyAII();for(inti=0;i<taskes.lengt
13、h;i+)if(taskesi=null)continue;("SubmitTask<"+taskesi.getTaskld()+">:"+();/*線程池信息*return*/publicStringgetInfo()StringBuffersb=newStringBuffer();sb.append("nTaskQueueSize:"+taskQueue.size();for(inti=0;i<workers.length;i+)sb.append("nWo
14、rker"+i+"is"+(workersi.isWaiting()?"Waiting.":"Running.");returnsb.toString();/*銷毀線程池*/publicsynchronizedvoiddestroy()for(inti=0;i<worker_num;i+)workersi.stopWorker();workersi=null;taskQueue.clear();北京尚學堂-cctv央視網廣告合作伙伴,專業IT培訓機構,口碑最好的java培訓、,iOS培訓,android培訓,hadoo
15、p大數據培訓,web前端培訓機構,0元入學,先就業后付款,平均就業薪水9500以上眾兀學堂400-009-佃皿/*池中工作線程*authorobullxl*/privateclassPoolWorkerextendsThreadprivateintindex=-1;/*該工作線程是否有效*/privatebooleanisRunning=true;/*該工作線程是否可以執行新任務*/privatebooleanisWaiting=true;publicPoolWorker(intindex)this.index=index;start();publicvoidstopWorker()this.
16、isRunning=false;publicbooleanisWaiting()returnthis.isWaiting;/*循環執行任務*這也許是線程池的關鍵所在*/publicvoidrun()while(isRunning)Taskr=null;synchronized(taskQueue)while(taskQueue.isEmpty()try/*任務隊列為空,則等待有新任務加入從而被喚醒*/taskQueue.wait(20);catch(InterruptedExceptionie)logger.error(ie);/*取岀任務執行*/r=(Task)taskQueue.remov
17、e(0);if(r!=null)isWaiting=false;北京尚學堂-cctv央視網廣告合作伙伴,專業IT培訓機構,口碑最好的java培訓、,iOS培訓,android培訓,hadoop大數據培訓,web前端培訓機構,0元入學,先就業后付款,平均就業薪水9500以上tryif(debug)r.setBeginExceuteTime(newDate();taskLogger.debug("Worker<"+index+">startexecuteTask<"+r.getTaskld()+">");if(r.
18、getBeginExceuteTime().getTime()-r.getSubmitTime().getTime()>1000)taskLogger.debug("longerwaitingtime."+()+",<"+index+">,time:"+(r.getFinishTime().getTime()-r.getBeginExceuteTime().getTime();/*該任務是否需要立即執行*/if(r.needExecuteImmediate()newThread(r).start();el
19、ser.run();if(debug)r.setFinishTime(newDate();taskLogger.debug("Worker<"+index+">finishtask<"+r.getTaskId()+">");if(r.getFinishTime().getTime()-r.getBeginExceuteTime().getTime()>1000)taskLogger.debug("longerexecutiontime."+()+",<&qu
20、ot;+index+">,time:"+(r.getFinishTime().getTime()-r.getBeginExceuteTime().getTime();catch(Exceptione)e.printStackTrace();logger.error(e);isWaiting=true;r=null;/*任務接口類*/北京尚學堂-cctv央視網廣告合作伙伴,專業IT培訓機構,口碑最好的java培訓、,iOS培訓,android培訓,hadoop大數據培訓,web前端培訓機構,0元入學,先就業后付款,平均就業薪水9500以上packageorg.ymcn.
21、util;importjava.util.Date;*所有任務接口*其他任務必須繼承訪類*authorobullxlpublicabstractclassTaskimplementsRunnable/privatestaticLoggerlogger=Logger.getLogger(Task.class);/*產生時間*/privateDategenerateTime=null;/*提交執行時間*/privateDatesubmitTime=null;/*開始執行時間*/privateDatebeginExceuteTime=null;/*執行完成時間*/privateDatefinishT
22、ime=null;privatelongtaskId;publicTask()this.generateTime=newDate();*任務執行入口*/publicvoidrun()*相關執行代碼*beginTransaction();*執行過程中可能產生新的任務subtask=taskCore();* commitTransaction();* 增加新產生的任務ThreadPool.getInstance().batchAddTask(taskCore();*/*所有任務的核心所以特別的業務邏輯執行之處*throwsExceptionpublicabstractTasktaskCore()throwsException;/*是否用到數據庫*returnprotectedabstractbooleanuseDb();/*是否需要立即執行*returnprotectedabstractbooleanneedExecutelmmediate();/*北京尚學堂-cctv央視網廣告合作伙伴,專業IT培訓機構,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海洋工程總承包管理及配合措施
- 裝配式建筑施工流程協調措施
- 一年級心理健康培訓課程計劃
- 科研院所實驗室危化品管理職責
- 四年級上冊道德與法治課外拓展計劃
- 鄉鎮衛生院免疫接種工作計劃
- 工業廠房模板工程質量保證措施實踐
- 工期承諾及人才激勵措施
- 淘寶美妝店鋪策劃書范文
- 一年級上冊英語教學計劃他
- 2025年行政執法人員執法證考試必考多選題庫及答案(共250題)
- 2024年山東夏季高中學業水平合格考歷史試卷真題(含答案詳解)
- GB/T 27922-2011商品售后服務評價體系
- GB/T 23312.3-2009漆包鋁圓繞組線第3部分:130級聚酯漆包鋁圓線
- 國外發票模板invoice
- GA/T 168-2019法醫學機械性損傷尸體檢驗規范
- 卡特彼勒標桿研究報告
- 2022年重慶出版集團有限公司招聘筆試試題及答案解析
- 大豬料配方設計思路課件
- 工程竣工圖章樣式
- 技工序列考評、評聘管理辦法
評論
0/150
提交評論