JAVA实现异步任务

业务场景

         当接收到一个接口请求时,需要将设备的广播信号进行打开,然后再规定的时间后,发送停止信号,将广播停止。这个时候不想通过定时器定时反复查询广播有没有关闭,太占用资源,所以想通过延时一定时间后,执行停止接口,但是又不能让后续逻辑堵塞。

处理方法

 

AlarmOutStatus outStatus = new AlarmOutStatus();
outStatus.setChannelIndexCode(id);
outStatus.setStatus("1");
HikRootData<AlarmOutStatus> alarmOutStatusHikRootData = AlarmOutHttpClient.setStatus(outStatus);
if (alarmOutStatusHikRootData != null) {
    if ("0".equals(alarmOutStatusHikRootData.getCode())) {
        addYjIpCache(id);
        System.out.println(ip + ":干冰排放区域预警广播已经打开");

        // 创建一个异步任务
        CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
            // 这里是你要异步执行的代码
            System.out.println("Async task started");
            System.out.println("音柱id:"+id);
            try {
                Thread.sleep(6*60*1000);  // 模拟耗时操作
                queryYjIpExpires(id, (Object id1) -> {
                    AlarmOutStatus outStatus1 = new AlarmOutStatus();
                    outStatus1.setChannelIndexCode(id1+"");
                    outStatus1.setStatus("0");
                    HikRootData<AlarmOutStatus> alarmOutStatusHikRootData1 = AlarmOutHttpClient.setStatus(outStatus1);
                    if (alarmOutStatusHikRootData1 != null) {
                        if ("0".equals(alarmOutStatusHikRootData1.getCode())) {
                            System.out.println(id1 + ":干冰排放区域预警广播已经关闭");
                        }
                    }
                    return null;
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Async task finished");
        });
    }
}

       其中主要是

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {});执行异步
        System.out.println("11111");
        CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
            // 这里是你要异步执行的代码
            System.out.println("Async task started");
            try {
                System.out.println("22222");
                Thread.sleep(2000);  // 模拟耗时操作
                System.out.println("44444");

            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Async task finished");
        });
        System.out.println("3333");

这个执行顺序就是

11111
3333

22222
44444

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值