天天看點

java.util.concurrent相關-ThreadPoolExecutor

引用參考:

--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]