自定义线程池开发实例代码


    public Map<String,Object> typeNum() throws InterruptedException {
        Map<String,Object> result = new HashMap<>();
      
        /**手写线程池
         * @param corePoolSize     核心池大小 int
         * @param maximumPoolSize  最大池大小 int
         * @param keepAliveTime    保活时间   long(任务完成后要销毁的延时)
         * @param unit             时间单位    决定参数3的单位,枚举类型的时间单位
         * @param workQueue        工作队列    用于存储任务的工作队列(BlockingQueue接口类型)
         * @param threadFactory    线程工厂    用于创建线程
         * @param RejectedExecutionHandler   拒绝策略    直接抛异常
         *线程不是越多越好,google工程师推荐  线程个数=cpu核心数+1(例如四核的开5个线程最好)
         * */
        // 参数任务上限
        LinkedBlockingQueue<Runnable> blockingQueue = new LinkedBlockingQueue<>(1000);
        ThreadFactory threadFactory = new ThreadFactory() {
            //  int i = 0;  用并发安全的包装类
            AtomicInteger atomicInteger = new AtomicInteger(1);
            @Override
            public Thread newThread(Runnable r) {
                //创建线程 吧任务传进来
                Thread thread = new Thread(r);
                // 给线程起个名字
                thread.setName("MyThread" + atomicInteger.getAndIncrement());
                return thread;
            }
        };
        ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 10, 1200L,
                TimeUnit.SECONDS, blockingQueue, threadFactory,new ThreadPoolExecutor.AbortPolicy());
        pool.execute(new Runnable() {
            @Override
            public void run() {
                //查询全部数量
                map.put("all",all);
                pool.shutdown();
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                //查询我发起的数量
                map.put("started",started);
                pool.shutdown();
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                //查询已办数量
                map.put("done",done);
                pool.shutdown();
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
                //按类型查询数量
            
                pool.shutdown();
            }
        });
        pool.execute(new Runnable() {
            @Override
            public void run() {
             	//查询审批速度
                pool.shutdown();
            }
        });
        //我的需求是等待所有线程任务都执行完毕后,统一返回结果,所以需要等待1分钟等所有线程执行完毕,1分钟还没执行完就抛异常
        pool.awaitTermination(1, TimeUnit.MINUTES);
        result.put("lable",lable);
        result.putAll(map);
        return result;
    }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值