java線程池工具類代碼(利用java官方線程池類ExecutorService實現)__JAVA多線程線程池

來源:互聯網
上載者:User
package common.util;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;/**線程工具類*/public class ThreadUtil {/**長時間軸程池的最大線程數量*/private static final int MAX_THREAD = 2;/**長時間軸程的逾時時間,如果線程執行時間超過這個時間會自動釋放*/private static final int LONG_TIMEOUT_TIME = 60000;/**短時間軸程的逾時時間,如果線程執行時間超過這個時間會自動釋放*/private static final int SORT_TIMEOUT_TIME = 12000;/**長時間軸程池,用於執行短時間較長的線程,需要設定最大線程數量*/private static ExecutorService longTimeThreadPool = Executors.newFixedThreadPool(MAX_THREAD);/**短時間軸程池,用於存放執行時間較短的線程,無需設定線程的最大數量*/private static ExecutorService sortTimeThreadPool = Executors.newCachedThreadPool();/** * 建立一個線程,將線程放到短時間軸程池中,並且啟動一個守護線程監控線程逾時 *  *  * @param runnable:需要啟動並執行線程 *  * @throws Exception * */public static synchronized void getSortTimeOutThread(Runnable runnable){//將線程提交到短時間軸程池中,然後會得到一個FutureFuture<String> future = (Future<String>) sortTimeThreadPool.submit(runnable);//啟動一個守護線程,這個線程將計算逾時new ThreadUtil().monitorThreadTime(SORT_TIMEOUT_TIME,future);}/** * 建立一個線程,將線程放到長時間軸程池中,並且啟動一個守護線程監控線程逾時 *  *  * @param runnable:需要啟動並執行線程 *  * @throws Exception * */public static synchronized void getLongTimeOutThread(Runnable runnable) throws Exception{//將線程提交到短時間軸程池中,然後會得到一個FutureFuture<String> future = (Future<String>) longTimeThreadPool.submit(runnable);//啟動一個守護線程,這個線程將計算逾時new ThreadUtil().monitorThreadTime(LONG_TIMEOUT_TIME,future);}/** * 建立一個線程,將線程放到長時間軸程池中,並且啟動一個守護線程監控線程逾時 *  *  * @param runnable:需要啟動並執行線程 * @param timeOutTime:自訂的逾時時間 *  * @throws Exception * */public static synchronized void getLongTimeOutThread(Runnable runnable,int timeOutTime) throws Exception{//將線程提交到短時間軸程池中,然後會得到一個FutureFuture<String> future = (Future<String>) longTimeThreadPool.submit(runnable);//啟動一個守護線程,這個線程將計算逾時new ThreadUtil().monitorThreadTime(timeOutTime,future);}/** * 監控線程逾時守護線程,到逾時時間去查看一下線程狀態,如果正在執行中則停止線程(這段有問題) *  * @param timeOutTime:逾時時間 * @param future:執行結果表單,將用來計算逾時 *  *  * */private void monitorThreadTime(int timeOutTime,Future<String> future){//執行守護線程new Thread(new Runnable() {@Overridepublic void run() {//等待一段時間,然後調用執行結果,如果沒有執行完,則試著去結束try {Thread.sleep(timeOutTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//判斷future是否執行完成,如果逾時未完成,則試著結束線程if(!future.isDone()){//false表示不允許線程執行時中斷,true表示允許future.cancel(true);}}}).start();}}

守護線程監控逾時的代碼有問題,後面我找到問題了會更新,現在最好屏蔽掉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.