修复SystemTimer无法结束进程问题

This commit is contained in:
Looly 2023-05-20 01:55:40 +08:00
parent 25eca5dba7
commit 9eba7f77cf
2 changed files with 34 additions and 0 deletions

View File

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

View File

@ -0,0 +1,28 @@
/*
* 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 org.dromara.hutool.cron.timingwheel;
public class Issue3090Test {
public static void main(String[] args) {
SystemTimer timer = new SystemTimer();
timer.setDelayQueueTimeout(1000);
timer.start();
timer.addTask(new TimerTask(() -> {
System.out.println(1);
System.out.println("任务已经完成");
}, 1000));
timer.stop();
System.out.println("线程池已经关闭");
}
}