多线程ThreadPoolExecutor 的例子调用

 线程池的好处:

1.减少系统资源消耗:线程池中线程能够被复用,不需要每次创建一个线程执行任务,执行完任务之后进行线程销毁,减少线程创建与线程销毁带来的系统开销以及时间片轮转和上下文切换带来的开销;

2.提高执行任务的响应速度:将任务提交到线程池中,一旦线程池中有空闲线程,可以直接调用线程执行任务,节省线程创建所带来的时间;

3.线程的统一调度管理:能够对线程池中的线程都进行统一的管理、调度以及销毁;

线程池的状态:
1.RUNNING:接受新的任务,执行任务队列里面的任务;
2.SHUDOWN:不再接受新的任务,但会执行任务队列里面的任务;
3.STOP:不再接受新的任务,也不执行任务队列里面的任务;同时中断正在执行的任务;
4.TIDYING:所有的任务已经完成,工作线程为0;TIDYING会调用terminated()进入TERMINATED状态;
5.TERMINATED:terminated()函数执行完成,线程池终止;

线程池状态间的转换:
RUNNING -> SHUTDOWN:调用shutdown()函数
RUNNING -> STOP:调用shutdownNow()函数
SHUTDOWN -> STOP:调用shutdownNow()函数
SHUTDOWN -> TIDYING:任务队列和工作线程都为空(等待任务队列里面的任务执行完成,工作线程终止)
STOP -> TIDYING:工作线程都为空(当进入STOP状态后中断所有工作线程进入TIDYING)
TIDYING -> TERMINATED:调用terminated()函数执行完成(进入TIDYING状态会调用terminated()函数)

 

LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<Runnable>();
ThreadPoolExecutor fixedThreadPool = new ThreadPoolExecutor(50, 50,0L, TimeUnit.MILLISECONDS,taskQueue);
try {
  
    for (int i = 0; i < mapList.size(); i++) {
        final int index = i;
        fixedThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                try {
                  
                  //业务逻辑处理
                } catch (Exception e) {
                    log.error(e.getMessage(), e);
                }
            }
        });
    }
    fixedThreadPool.shutdown();
    while(true){
        if(fixedThreadPool.isTerminated()){
            break;
        }
    }
}catch (Exception e){
 log.error(e.getMessage(), e);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值