引用參考:
--Java ThreadPoolExecutor線程池原理及源碼分析
[url]http://blog.csdn.net/scherrer/article/details/50708737[/url]
--Java并發程式設計:線程池的使用
[url]https://www.cnblogs.com/dolphin0520/p/3932921.html[/url]
//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、SynchronousQueue
RejectedExecutionHandler 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() {
@Override
public void run() {
try {
logger.info("");
if(conditionExpression){
//
}else{
//
}
} catch (Exception e) {
logger.error("", e);
}
}
});
引用:
[url]http://blog.csdn.net/java2000_wl/article/details/22097059[/url]
[url]http://sinye.iteye.com/blog/1946717[/url]
[url]http://wujiu.iteye.com/blog/2178212[/url]
[url]https://my.oschina.net/u/169390/blog/97415[/url]
----線程池java.util.concurrent.ThreadPoolExecutor總結
[url]http://blog.csdn.net/sunmenggmail/article/details/35230475[/url]