1. 程式人生 > >Java 線程池之FixedThreadPool(Java代碼實戰-003)

Java 線程池之FixedThreadPool(Java代碼實戰-003)

AD sof block integer TP 最大值 ive HR execute

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

/**
 * FixThreadPoolExecutorTest 定義一個可重用的固線程數的線程池
 */
public class FixThreadPoolExecutorTest {
    public static void main(String[] args) {
        /*
         * 把處理請求任務的線程數設置為固定的10, corePoolSize = maxPoolSize = 10
         * keepAliveTime設置為0L,表示空閑的線程會立刻終止
         * workQueue則是使用LinkedBlockingQueue,但是沒有設置範圍,那麽則是最大值(Integer.MAX_VALUE)
         * 這基本就相當於一個無界隊列了。 使用該“無界隊列”則會帶來哪些影響呢?當線程池中的線程數量等於corePoolSize
         * 時,如果繼續提交任務,該任務會被添加到阻塞隊列workQueue中,當阻塞隊列也滿了之後,則線程池會新建線程執行任務直到maximumPoolSize。
         * 由於FixedThreadPool使用的是“無界隊列”LinkedBlockingQueue,那麽maximumPoolSize參數無效,
         * 同時指定的拒絕策略AbortPolicy也將無效。而且該線程池也不會拒絕提交的任務,如果客戶端提交任務的速度快於任務的執行,
         * 那麽keepAliveTime也是一個無效參數。
         
*/ ExecutorService pool = Executors.newFixedThreadPool(10); // 始終只有10個線程來處理請求任務,來不及處理的任務會放置於阻塞隊列中 for (int i = 0; i < 50; i++) { pool.submit(new Runnable() { @Override public void run() { System.out.println("hello world! Execute ThreadName=" + Thread.currentThread().getName()); } }); } } }

Java 線程池之FixedThreadPool(Java代碼實戰-003)