建立Runnable實現類java
package ThreadTest; /** * * @author Administrator * */ public class RunnableTest implements Runnable { @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"--"+i); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+"--執行結束"); } }
再建立測試類,並建立線程池ide
package ThreadTest; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import com.google.common.util.concurrent.ThreadFactoryBuilder; public class ThreadPoolTest { public static void main(String[] args) { ThreadFactory threadFactory=new ThreadFactoryBuilder().setNameFormat("myThreadPool-%d").build(); LinkedBlockingQueue<Runnable> workQueue=new LinkedBlockingQueue<Runnable>(250); ExecutorService executor=new ThreadPoolExecutor(3, 5, 20, TimeUnit.SECONDS, workQueue, threadFactory);//建立線程池 for(int i=0;i<10;i++){ RunnableTest test=new RunnableTest(); executor.execute(test); } } }
說明
類和接口測試
1 ExecutorService 提供線程池操做的接口 提供void execute(Runnable command)方法,傳入Runnable的實例即本例中的test; 2 ThreadPoolExecutor ExecutorService的實現類,提供4種構造方法。(只寫最後一個) new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler); (1)corePoolSize 核心線程數,即本例中填寫的數字3。 (2)workQueue任務隊列,負責存放超過核心線程數的請求,可指定大小如本例中LinkedBlockingQueue<Runnable>(250)的250; (3)maximumPoolSize 建立最大線程數,只有當請求超過任務隊列容量和核心線程數量是纔會建立,即本例中250+3=253; (4)handler 當請求超過最大線程數maximumPoolSize和任務隊列容量之和時,會調用。(能夠查看該RejectedExecutionHandler接口的幾個實現類,定義了處理策略,通常默認就行) (5)keepAliveTime 線程存活時間,對擋前線程多於核心線程數量時會殺死多於的線程保留到核心線程數量。 (6)unit 時間單位 (7)ThreadFactory 線程工廠 用來建立線程的。(採用Google guava來建立的)
運行展現ui
建立了0,1,2 三個核心線程(當有請求時核心線程纔會建立,除非手動設置);
運行過程當中能夠經過動態更改corePoolSize和maximumPoolSize 的大小,可是隻有ThreadPoolExecutor提供了set方法。google