修复SystemTimer无法结束进程问题

This commit is contained in:
Looly
2023-05-20 01:55:45 +08:00
parent 7a4f295be0
commit 47759928ac
3 changed files with 38 additions and 1 deletions

View File

@@ -31,6 +31,7 @@ public class SystemTimer {
* 轮询delayQueue获取过期任务线程
*/
private ExecutorService bossThreadPool;
private volatile boolean isRunning;
/**
* 构造
@@ -56,6 +57,7 @@ public class SystemTimer {
*/
public SystemTimer start() {
bossThreadPool = ThreadUtil.newSingleExecutor();
isRunning = true;
bossThreadPool.submit(() -> {
while (true) {
if(false == advanceClock()){
@@ -70,6 +72,7 @@ public class SystemTimer {
* 强制结束
*/
public void stop(){
this.isRunning = false;
this.bossThreadPool.shutdown();
}
@@ -91,6 +94,9 @@ public class SystemTimer {
* @return 是否结束
*/
private boolean advanceClock() {
if(false == isRunning){
return false;
}
try {
TimerTaskList timerTaskList = poll();
if (null != timerTaskList) {

View File

@@ -0,0 +1,30 @@
/*
* Copyright (c) 2023 looly(loolly@aliyun.com)
* Hutool is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package cn.hutool.cron.timingwheel;
import cn.hutool.core.lang.Console;
public class Issue3090Test {
public static void main(String[] args) {
final SystemTimer timer = new SystemTimer();
timer.setDelayQueueTimeout(1000);
timer.start();
timer.addTask(new TimerTask(() -> {
Console.log(1);
Console.log("任务已经完成");
}, 1000));
timer.stop();
Console.log("线程池已经关闭");
}
}