一个定时demo

import lombok.SneakyThrows;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: zlf
 * @Date: 2021/07/10/18:18
 * @Description:
 */
public class main {

    public static ScheduledThreadPoolExecutor spool;



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

        spool = new ScheduledThreadPoolExecutor(2);
      	CountDownLatch cdl = new CountDownLatch(5);


        HttpEntity<Map<String, Object>> request = new HttpEntity<Map<String, Object>>(_meidi,headers);
        ConcurrentHashMap<String, Future> futureMap = new ConcurrentHashMap<String, Future>();
        requestTask requestTask = new requestTask(warnUrl,request,cdl,restTemplate,futureMap);

        ScheduledFuture<?> scheduledFuture = spool.scheduleAtFixedRate(requestTask, 0, 5, TimeUnit.MINUTES);
        futureMap.put("scheduledFuture",scheduledFuture);
        // 必须关闭才行
        spool.shutdownNow();

    }
}

public class requestTask implements Runnable{

    private AtomicInteger ait = new AtomicInteger(0);

    private volatile CountDownLatch cdl;

    private HttpEntity<Map<String, Object>> request;

    private String url ;

    private ConcurrentHashMap<String, Future> futureMap;


    RestTemplate restTemplate;

    public requestTask(String url ,HttpEntity<Map<String, Object>> request,CountDownLatch cdl,RestTemplate restTemplate,ConcurrentHashMap<String, Future> futureMap){
        this.request = request;
        this.url = url;
        this.cdl = cdl;
        this.restTemplate = restTemplate;
        this.futureMap = futureMap;
    }


    @SneakyThrows
    @Override
    public   void run() {
        System.out.println("调用初始化流程");
        cdl.countDown();
        int i = ait.incrementAndGet();
        ResponseEntity<String> entity = restTemplate.postForEntity(url, request, String.class);
        String json = entity.getBody();
        JSONObject jsonObject = JSONUtil.parseObj(json);
        System.out.println(jsonObject);
        String error = jsonObject.get("error", String.class);
        if(!"success".equals(error)){
            //  多次尝试

            log.error("告警失败次数:{}",i);
            if(i == 5){
                // 不再尝试
//                    cdl.wait();
                Future scheduledFuture = futureMap.remove("scheduledFuture");
                scheduledFuture.cancel(true);
            }


        }else {
            log.warn("报警成功");
            log.warn("报警发送结果集: {}",JSONUtil.parseObj(request.getBody()).toString());
//            cdl.wait();
            Future scheduledFuture = futureMap.remove("scheduledFuture");
            scheduledFuture.cancel(true);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值