国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java的線程池ExecutorService簡單介紹

2019-11-06 06:58:47
字體:
來源:轉載
供稿:網友

        做java的開發,線程是經常用的。最簡單的使用大家都應該清楚,如繼承Thread類、實現Runnable接口。這樣,是沒有問題。但是當我們需要頻繁的處理一些任務時候,就要多次創建線程和處理線程關閉等回收工作。 這樣比較麻煩。并且如果同時不限制線程個數,很多個任務一起執行,對性能有一定影響。所以,java提供了Executor線程池來處理并發任務,并且可以支持4種模式:

   1.newCachedThreadPool:    創建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。    2.newFixedThreadPool:創建一個定長線程池,可控制線程最大并發數,超出的線程會在隊列中等待。    3.newScheduledThreadPool: 創建一個定長線程池,支持定時及周期性任務執行。    4.newSingleThreadExecutor: 創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先級)執行。  

一 創建線程池 

// 創建可以容納3個線程的線程池  ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);    // 線程池的大小會根據執行的任務數動態分配  ExecutorService cachedThreadPool = Executors.newCachedThreadPool();    // 創建單個線程的線程池,如果當前線程在執行任務時突然中斷,則會創建一個新的線程替代它繼續執行任務    ExecutorService singleThreadPool = Executors.newSin // 效果類似于Timer定時器 ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);

二 啟動線程池

啟動線程提供了2個方法:ExecutorService 的submit() 與execute(),定義如下:     

<T> Future<T> submit(Callable<T> var1);<T> Future<T> submit(Runnable var1, T var2);Future<?> submit(Runnable var1);void execute(Runnable var1);

三  關閉線程池

  使用以下的方法:   1.shutdown() 方法: 關閉線程池資源。不再接受新的任務,之前提交的任務等待執行結束再關閉。并且回收資源。    2.shutdownNow(): 立即關閉,通過調用Thread.interrupt來實現線程的立即退出。執行該方法,線程池的狀態立刻變成STOP狀態,并試圖停止所有正在執行的線程,不再處理還在池隊列中等待的任務。并且回收資源。  

四 new Thread和線程池創建線程區別

    new Thread的弊端如下:   a. 每次new Thread新建對象性能差。   b. 線程缺乏統一管理,可能無限制新建線程,相互之間競爭,及可能占用過多系統資源導致死機或oom。   c. 缺乏更多功能,如定時執行、定期執行、線程中斷。  相比new Thread,Java提供的四種線程池的好處在于:  a. 重用存在的線程,減少對象創建、消亡的開銷,性能佳。  b. 可有效控制最大并發線程數,提高系統資源的使用率,同時避免過多資源競爭,避免堵塞。  c. 提供定時執行、定期執行、單線程、并發數控制等功能。  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辉南县| 沽源县| 大庆市| 平原县| 宝兴县| 海宁市| 东乡县| 石门县| 苗栗市| 木兰县| 泰兴市| 保靖县| 丰原市| 科技| 逊克县| 保定市| 宜阳县| 安福县| 桃园市| 太仓市| 门源| 普定县| 盘山县| 古蔺县| 敖汉旗| 连城县| 年辖:市辖区| 黔江区| 普格县| 丰镇市| 明星| 封丘县| 图木舒克市| 保康县| 通化县| 江安县| 浦北县| 江孜县| 平塘县| 卫辉市| 盱眙县|