线程池定时任务添加任务以及停止线程

                最近有个需求,就是项目启动的时候需要创建个线程池去执行,而且有时间周期,

而且根绝不同的情况可以随时通过接口停止该线程.

//1首先创建个线程池 ,默认核心为10
    static ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(10);


//2 在写一个启动项目自动启动的注解
   @PostConstruct
    public void initHttpApiDetectSuffix() {


        logger.info("创建线程池");
        BaseEncryptionAndDecryption instance = GetEncryptionAndDecryptionBean.getInstance();
        List<HttpApiDetectManageDO> list = httpApiDetectManageMapper.selectAllByParam(null, null, null, null, 1);
        list.stream().forEach(bean -> map.put(bean.getApiName(), bean.getStatus()));
        for (HttpApiDetectManageDO bean : list) {
            //调用线程的方法
            httpApiDetectStart(threadPool, count, bean, map, instance);
            count++;
        }
        logger.info("现有探测线程数为:{}", map.size());


    }



//3然后再创建一个方法

 public void httpApiDetectStart1(ScheduledExecutorService threadPool, int i, HttpApiDetectManageDO bean, Map<String, Integer> map, BaseEncryptionAndDecryption instance) {
        ScheduledFuture<?> scheduledFuture = threadPool.scheduleAtFixedRate(new Runnable() {
                                                                                @Override
                                                                                public void run() {
                                                                                    if (map.get(bean.getApiName()) == 0) {

                                                                                        logger.info("http探测线程停止,apiName={}", bean.getApiName());
                                                                                        Thread.currentThread().stop();
                                                                                    }
                                                                                    String url;
                                                                                    logger.info("执行第" + i + "个接口探测scheduleAtFixedRate 方法:" + LocalDateTime.now());
                                                                                        url = bean.getProtocol()+bean.getApiIp() + ":" + bean.getApiPort() + bean.getDetectAddr();
                                                                                        String detectParams = bean.getDetectParams();
                                                                                        Map params = null;
                                                                                        if (StringUtils.isNotBlank(detectParams)) {
                                                                                            params = JSON.parseObject(detectParams);
                                                                                            logger.info("平台探测参数-->{}",params);
                                                                                        }
                                                                                        ApiCheckResult r = null;
                                                                                        try {
                                                                                            r = HttpJdk.doCall(url, params, "get", -1);
                                                                                            logger.info("平台探测结果-->{}",r);
                                                                                            insertDB(r, bean);
                                                                                        } catch (Exception e) {
                                                                                            e.printStackTrace();
                                                                                            logger.info(e.getMessage());
                                                                                        }



                                                                                }
                                                                            },
                0, // 0s 后开始执行定时任务
                bean.getDetectCycle(), // 定时任务的执行间隔为
                TimeUnit.MINUTES);// 描述上面两个参数的时间单位

    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值