ThreadPoolExecutor参数讲解

[b]1. 线程池可以节省创建多个线程带来的开销问题。[/b]

[b]2. 线程池的参数如下:[/b]
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
Executors.defaultThreadFactory(), defaultHandler);
}


说明:
[b] 线程池按以下行为执行任务
1)当线程数小于核心线程数时,创建线程。
2)当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。
3)当线程数大于等于核心线程数,且任务队列已满
i)若线程数小于最大线程数,创建线程
ii)若线程数等于最大线程数,抛出异常,拒绝任务[/b]

3. 例子

public static void main(String args[]) throws InterruptedException {

ThreadPoolExecutor executor;
executor = new ThreadPoolExecutor(3, 10, 5, TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(10));

for(int i=0;i<20;i++){
Runnable r=new Runnable(){
@Override
public void run() {
System.out.println("thread run...");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}

}

};
executor.execute(r);
}
}



结果说明:
[b] 1)如果队列不指定大小,默认大小无限大,这样队列不会满,每次只有三个coreThread来
跑(大于核心线程数,但队列不满,任务放入队列中);
2)如果指定队列大小为10,则最大的10个工作线程来跑;
3)如果指定队列大小为5,则队列满了,后面的线程被reject掉了。[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值