feat: ScheduledProvider现可作为普通任务提交至线程池.

This commit is contained in:
2025-01-12 08:49:38 +08:00
parent e5061c1233
commit ac852b9501
2 changed files with 40 additions and 13 deletions

View File

@@ -12,12 +12,13 @@ import java.util.function.Consumer;
/**
* 自动更新的ip供应器
* <li> 异步更新ip, 获取到的ip地址不一定为最新可用的。
* <li> 也可作为简单的任务提交到线程池中执行.
*
* @author <a href="mailto:serliunx@yeah.net">SerLiunx</a>
* @version 1.0.3
* @since 2024/11/25
*/
public class ScheduledProvider extends AbstractProvider implements AutoCloseable {
public class ScheduledProvider extends AbstractProvider implements AutoCloseable, Runnable {
private final Provider internalProvider;
@@ -60,6 +61,11 @@ public class ScheduledProvider extends AbstractProvider implements AutoCloseable
poolExecutor.shutdown();
}
@Override
public void run() {
doAction();
}
@Override
public String get() {
return internalCache;
@@ -107,18 +113,23 @@ public class ScheduledProvider extends AbstractProvider implements AutoCloseable
* 提交任务逻辑
*/
private void submitTask() {
task = poolExecutor.scheduleAtFixedRate(() -> {
// 打断时, 终止已有的任务. (逻辑上不应该发生)
if (Thread.currentThread().isInterrupted()) {
log.debug("上一个ip更新任务已终止.");
return;
}
InstanceContextHolder.setAdditional("ip-update");
internalCache = internalProvider.get().trim();
task = poolExecutor.scheduleAtFixedRate(this::doAction, 0, timePeriod, TimeUnit.SECONDS);
}
if (valueConsumer != null) {
valueConsumer.accept(internalCache);
}
}, 0, timePeriod, TimeUnit.SECONDS);
/**
* 执行逻辑
*/
private void doAction() {
// 打断时, 终止已有的任务. (逻辑上不应该发生)
if (Thread.currentThread().isInterrupted()) {
log.debug("上一个ip更新任务已终止.");
return;
}
InstanceContextHolder.setAdditional("ip-update");
internalCache = internalProvider.get().trim();
if (valueConsumer != null) {
valueConsumer.accept(internalCache);
}
}
}