天天看點

java線程池和關閉線程池中的線程

如果線程經常喜歡去new的話是不對的,你需要一個池子管理。 newCachedThreadPool 這個一個帶緩存的線程池,是個可以無限大的線程池,建立的線程放倒這個池子裡,當線程停掉了的時候,下個個線程進來,可以複用這個線程。 newFixedThreadPool 是個有長度的線程池,與上一個不同的是,當線程超越某個長度的時候,新進來的線程就會排隊。線程池的大小最好比對系統資源。按照系統資源來設定大小最好。 newScheduledThreadPool 可以執行周期性任務的定長線程池 newSingleThreadExecutor 任務按照指定順序(FIFO, LIFO, 優先級)執行 用線程池實作昨天寫的那個例子

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);

Future future = fixedThreadPool.submit(new Runnable() { @Override public void run() { 
new Runnable() {
            @Override
            public void run() {
                /*
                 * 確定線程不斷執行不斷重新整理界面
                 */
                while (true&&(!Thread.currentThread().isInterrupted())) {
                    try {

                        Log.i("tag","線程運作中"+Thread.currentThread().getId());

                        // 每執行一次暫停40毫秒
                        //當sleep方法抛出InterruptedException  中斷狀态也會被清掉
                        Thread.sleep(40);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        //如果抛出異常則再次設定中斷請求
                        Thread.currentThread().interrupt();
                    }
                }
            }
        }
);
//觸發條件設定中斷
future.cancel(true);

作者:慕碼人3916992
      

繼續閱讀