//ThreadPoolExecutor是JDK並發包提供的一個線程池服務,基於ThreadPoolExecutor可以很容易將一個Runnable介面的任務放入線程池中。
java.util.concurrent.ThreadPoolExecutor.ThreadPoolExecutor(int corePoolSize, //核心線程數,會一直存活,即使沒有任務,線程池也會維護線程的最少數量int maximumPoolSize, //線程池維護線程的最大數量long keepAliveTime, //線程池維護線程所允許的空閑時間,當線程空閑時間達到keepAliveTime,該線程會退出,直到線程數量等於corePoolSize。如果allowCoreThreadTimeout設定為true,則所有線程均會退出直到線程數量為0。TimeUnit unit, //線程池維護線程所允許的空閑時間的單位、選擇性參數值為:TimeUnit中的幾個靜態屬性:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。BlockingQueue<Runnable> workQueue, // 線程池所使用的緩衝隊列,常用的是:java.util.concurrent.ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueueRejectedExecutionHandler handler //線程池中的數量大於maximumPoolSize,對拒絕任務的處理策略,預設值ThreadPoolExecutor.AbortPolicy())
import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadPoolDemo{ /** * 線程池 */ private static final ExecutorService executorService = new ThreadPoolExecutor(20, 50, 900, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(1000), new ThreadPoolExecutor.CallerRunsPolicy()); /** * 新增工作到線程池 * * @param runnable */ public static void doJobWithThreadPool(Runnable runnable) { executorService.execute(runnable); }}
//
一個任務通過 execute(Runnable)方法被添加到線程池,任務就是一個Runnable類型的對象,任務的執行方法就是run()方法,如果傳入的為null,側拋出NullPointerException。
如果當前線程數小於corePoolSize,調用addIfUnderCorePoolSize方法。
addIfUnderCorePoolSize方法首先調用mainLock加鎖,再次判斷當前線程數小於corePoolSize並且線程池處於RUNNING狀態,則調用addThread增加線程
//執行個體調用
ThreadPoolDemo.doJobWithThreadPool(new Runnable() {@Overridepublic void run() { try {logger.info("");if(conditionExpression){ //}else{ //} } catch (Exception e) {logger.error("", e); }}});
引用:
http://blog.csdn.net/java2000_wl/article/details/22097059
http://sinye.iteye.com/blog/1946717
http://wujiu.iteye.com/blog/2178212
https://my.oschina.net/u/169390/blog/97415