package com.erayt.mock.test.thread;
import com.erayt.fmut.infrastructure.util.thread.LongTimeTaskExecutor;
import com.erayt.fmut.infrastructure.util.thread.ThreadPoolExecutorBuilder;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
* 文件名: com.erayt.mock.test.thread-SchedualThread </br>
* 文件简介: </br>
* 执行定时任务(可动态修改定时任务间隔)
* @author wxy </br>
* @date 2024/8/29 15:39 </br>
* Copyright (c) 2022 ERAYT. All Rights Reserved
*/
@Component
public class ScheduleThread implements Runnable, InitializingBean, DisposableBean {
private LongTimeTaskExecutor pool;
private static Boolean update = Boolean.TRUE;
private static ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
private static ScheduledFuture<?> scheduledFuture1 = null;
private int time = 1;
@Override
public void run() {
while (update){
try {
TimeUnit.SECONDS.sleep(1);
scheduledFuture1 = scheduledExecutorService.scheduleAtFixedRate(
() -> System.out.println(time), 0, time, TimeUnit.SECONDS);
update = Boolean.FALSE;
System.out.println("触发更新");
onChange();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void destroy() throws Exception {
scheduledExecutorService.shutdown();
}
@Override
public void afterPropertiesSet() throws Exception {
pool = ThreadPoolExecutorBuilder.createSingleLongTimeTaskPool("ScheduleThread");
pool.init();
pool.submit(this);
}
public void onChange(){
scheduledFuture1.cancel(true);
update = Boolean.TRUE;
time = 10;
}
}