java併發庫學習

package com.wangbiao.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * @author wangbiao
 * @date and time Jun 18, 2014 3:16:12 PM
 * 
 */
public class ThreadPoolStudy {

    public static void main(String[] args) {

        // create thread pool

        /*
         * Executors.newFixedThreadPool(3);
         * 
         * 在任意點,在大多數 nThreads 線程會處於處理任務的活動狀態。
         * 若是在全部線程處於活動狀態時提交附加任務,則在有可用線程以前,附加任務將在隊列中等待。
         * 若是在關閉前的執行期間因爲失敗而致使任何線程終止,那麼一個新線程將代替它執行後續的任務(若是須要)。
         * 在某個線程被顯式地關閉以前,池中的線程將一直存在。
         */

        // ExecutorService threadPool = Executors.newFixedThreadPool(3);

        /*
         * 
         * Executors.newCachedThreadPool();
         * 
         * 建立一個可根據須要建立新線程的線程池,可是在之前構造的線程可用時將重用它們。
         * 對於執行不少短時間異步任務的程序而言,這些線程池一般可提升程序性能。 調用 execute 將重用之前構造的線程(若是線程可用)。
         * 若是現有線程沒有可用的,則建立一個新線程並添加到池中。 終止並從緩存中移除那些已有 60 秒鐘未被使用的線程。
         * 所以,長時間保持空閒的線程池不會使用任何資源。 注意,可使用 ThreadPoolExecutor
         * 構造方法建立具備相似屬性但細節不一樣(例如超時參數)的線程池。
         */
        // ExecutorService threadPool = Executors.newCachedThreadPool();

        /*
         * Executors.newSingleThreadExecutor();
         * 
         * 建立一個使用單個 worker 線程的 Executor,以無界隊列方式來運行該線程。
         * (注意,若是由於在關閉前的執行期間出現失敗而終止了此單個線程,那麼若是須要,一個新線程將代替它執行後續的任務)。
         * 可保證順序地執行各個任務,而且在任意給定的時間不會有多個線程是活動的。 與其餘等效的 newFixedThreadPool(1)
         * 不一樣,可保證無需從新配置此方法所返回的執行程序便可使用其餘的線程
         */

        ExecutorService threadPool = Executors.newSingleThreadExecutor();

        for (int i = 0; i <= 10; i++) {// excute 10 thread

            final int task = i;
            threadPool.execute(new Runnable() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    for (int j = 0; j <= 10; j++) {
                        System.out.println(Thread.currentThread().getName()
                                + "-" + "is loop of " + j + "-" + "is thread "
                                + task);
                    }
                }
            });
        }

        // threadPool.shutdownNow();//試圖中止全部正在執行的活動任務,暫停處理正在等待的任務,並返回等待執行的任務列表。
        threadPool.shutdown();// 啓動一次順序關閉,執行之前提交的任務,但不接受新任務。

        // execute will be delay 10 seconds
        /*
         * Executors.newScheduledThreadPool(3).schedule(new Runnable() {
         * 
         * @Override public void run() { // TODO Auto-generated method stub
         * System.out.println("begin to work"); } }, 10, TimeUnit.SECONDS);
         */

        // execute will be delay 10 seconds, 2 seconds one execution
        Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                System.out.println("begin to work");
            }
        }, 10, 2, TimeUnit.SECONDS);

    }
}
相關文章
相關標籤/搜索