import com.isyscore.rpc.file.config.DownloadTaskConfig;import com.isyscore.rpc.file.config.UploadTaskConfig;import com.isyscore.rpc.file.util.FileUtil;import com.isyscore.rpc.file.util.TimeUtils;import java.io.File;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;import static com.isyscore.rpc.file.FileDownloadHandler.FILE_DOWNLOAD_TASK_PATH;import static com.isyscore.rpc.file.FileUploadHandler.FILE_UPLOAD_TASK_PATH;/*** @author shizi* @since 2021-08-25 18:19:49*/public class DeamonTask { /** * 守护线程,用于清理 */ private final ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1, r -> { Thread thread = new Thread(r, "Thread-TaskCacheConfig-Deamon"); thread.setDaemon(true); return thread; }); private volatile boolean started = false; private static final DeamonTask task = new DeamonTask(); public static DeamonTask getInstance() { return task; } private DeamonTask(){} public void start() { if (started) { return; } synchronized (DeamonTask.class) { if (!started) { initDeamon(); started = true; } } } private void cleanUploadTask() { if (!FileUtil.exist(FILE_UPLOAD_TASK_PATH)) { return; } File taskConfigFile = FileUtil.getDirectFile(FILE_UPLOAD_TASK_PATH); File[] files = taskConfigFile.listFiles(); if (null == files) { return; } for (File file : files) { UploadTaskConfig taskConfig = FileUtil.readObject(UploadTaskConfig.class, file); if (null == taskConfig) { continue; } Long lastTime = taskConfig.getLastUpdateTime(); if (null == lastTime) { continue; } // 如果超过5个小时,则任务的进度文件删除掉 if (TimeUtils.plusHours(lastTime, 5) < System.currentTimeMillis()) { FileUtil.delete(file); } } } private void cleanDownTask() { if (!FileUtil.exist(FILE_DOWNLOAD_TASK_PATH)) { return; } File taskConfigFile = FileUtil.getDirectFile(FILE_DOWNLOAD_TASK_PATH); File[] files = taskConfigFile.listFiles(); if (null == files) { return; } for (File file : files) { DownloadTaskConfig taskConfig = FileUtil.readObject(DownloadTaskConfig.class, file); if (null == taskConfig) { continue; } Long lastTime = taskConfig.getLastUpdateTime(); if (null == lastTime) { continue; } // 如果超过5个小时,则任务的进度文件删除掉 if (TimeUtils.plusHours(lastTime, 5) < System.currentTimeMillis()) { FileUtil.delete(file); } } } private void initDeamon() { scheduler.scheduleWithFixedDelay(() -> { cleanUploadTask(); cleanDownTask(); }, 1, 30, TimeUnit.MINUTES); }}