java四種線程池的簡單介紹_第1頁
java四種線程池的簡單介紹_第2頁
java四種線程池的簡單介紹_第3頁
java四種線程池的簡單介紹_第4頁
java四種線程池的簡單介紹_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、java 四種線程池的簡單介紹在傳統(tǒng)的 cs 或者 bs 模式中,一個線程或者一個進(jìn)程負(fù)責(zé)一個請求,一個請求使用一個 socket 來進(jìn)行傳輸, 這樣的模式在低并發(fā)量的情況下還是可行的,但是用戶量一大的話就會導(dǎo)致系統(tǒng)資源大量被占用,影響服 務(wù)器的性能。所以,在 java 中有一種新的請求反饋機(jī)制叫做線程池,(java 培訓(xùn) 就到源碼時代打個比方,我們每天都 要去食堂吃飯,如果為每個人提供一個碗 筷子 是不是開銷比較大而且利用率不高,線程池的作用就相當(dāng) 于 100個人 在保證最多并發(fā)量的同時盡可能少提供碗筷的數(shù)量,比如說最多 50個人同時吃飯,那么就會 準(zhǔn)備 50雙碗筷 用掉了以后洗了繼續(xù)用,這

2、樣就可以節(jié)約大量的資源和提高利用率, java 中提供了 4中線 程池模型。(1 newCachedThreadPool創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。 示例代碼如下:Java 代碼package test;public class ThreadPoolExecutorTest public static void main(String args ExecutorService cachedThreadPool = Executors.newCachedThreadPool(;for (int i = 0; i < 10;

3、i+ final int index = i;try Thread.sleep(index * 1000; catch (InterruptedException e e.printStackTrace(;cachedThreadPool.execute(new Runnable( public void run( ;線程池為無限大, 當(dāng)執(zhí)行第二個任務(wù)時第一個任務(wù)已經(jīng)完成, (java 培訓(xùn) 就到源碼時代 會復(fù)用執(zhí)行第一個 任務(wù)的線程,而不用每次新建線程。(2 newFixedThreadPool創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待。示例代碼如下:Java 代碼p

4、ackage test;public class ThreadPoolExecutorTest public static void main(String args ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3;for (int i = 0; i < 10; i+ final int index = i;fixedThreadPool.execute(new Runnable( public void run( try Thread.sleep(2000; catch (InterruptedExcep

5、tion e e.printStackTrace(;因為線程池大小為 3,每個任務(wù)輸出 index 后 sleep 2秒,所以每兩秒打印 3個數(shù)字。定長線程池的大小最好根據(jù)系統(tǒng)資源進(jìn)行設(shè)置。如 Runtime.getRuntime(.availableProcessors(3 newScheduledThreadPool創(chuàng)建一個定長線程池,支持定時及周期性任務(wù)執(zhí)行。延遲執(zhí)行示例代碼如下:Java 代碼package test;public class ThreadPoolExecutorTest public static void main(String args ScheduledExec

6、utorService scheduledThreadPool = Executors.newScheduledThreadPool(5; scheduledThreadPool.schedule(new Runnable( public void run( , 3, TimeUnit.SECONDS;表示延遲 3秒執(zhí)行。定期執(zhí)行示例代碼如下:Java 代碼package test;public class ThreadPoolExecutorTest public static void main(String args ScheduledExecutorService scheduledT

7、hreadPool = Executors.newScheduledThreadPool(5; scheduledThreadPool.scheduleAtFixedRate(new Runnable( public void run( , 1, 3, TimeUnit.SECONDS;表示延遲 1秒后每 3秒執(zhí)行一次。(4 newSingleThreadExecutor創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序 (FIFO, LIFO, 優(yōu)先級 執(zhí)行。示例代碼如下:Java 代碼package test;public class ThreadPool

8、ExecutorTest public static void main(String args ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor(;for (int i = 0; i < 10; i+ final int index = i;singleThreadExecutor.execute(new Runnable( public void run( try Thread.sleep(2000; catch (InterruptedException e e.printStackTr

9、ace(;結(jié)果依次輸出,相當(dāng)于順序執(zhí)行各個任務(wù)。運(yùn)行程序做稍微修改:Java 代碼package test;public class ThreadPoolExecutorTest public static void main(String args ExecutorService singleThreadExecutor = Executors.newCachedThreadPool(;for (int i = 0; i < 100; i+ final int index = i;singleThreadExecutor.execute(new Runnable( public void run( try while(true Thread.sleep(10 * 1000; catch (InterruptedException e e.printStackTrace(;try Thread.sleep(500; catch (InterruptedExcept

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論