周期工具任务类,可随时添加和修改任务

这个工具类可用于随时添加或更改或移除定时任务

import com.sun.jersey.client.impl.CopyOnWriteHashMap;

import javax.validation.constraints.NotNull;
import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

/**
 * 周期任务工具类
 * @Auther Jun jie Yi
 * @Date 13:12 2021/11/7
 */
public class RateTaskUtil {

    //定义定时任务的线程池
    private ScheduledExecutorService pool;

    //存储正在执行的定时任务
    private Map<String, ScheduledFuture> allTask;

    public static RateTaskUtil getInstance() {
        //默认线程池中20条线程
        return new RateTaskUtil(20);
    }

    /**
     * 自定义线程数
     * @param corePoolSize 核心线程数
     * @return
     */
    public static RateTaskUtil getInstance(@NotNull int corePoolSize) {
        return new RateTaskUtil(corePoolSize);
    }

    /**
     * @param corePoolSize 核心线程数
     * @return
     */
    private RateTaskUtil(@NotNull int corePoolSize) {
        //创建核心线程池
        pool = Executors.newScheduledThreadPool(corePoolSize);
        //创建正在执行的任务存储集合
        allTask = new CopyOnWriteHashMap<>();
    }

    /**
     * 获取任务队列
     * @return
     */
    public Map<String, ScheduledFuture> getTaskQueue() {
        return allTask;
    }

    /**
     * 关闭线程池并情况任务队列
     */
    public void shutDownPool() {
        if (pool != null) {
            pool.shutdown();
            allTask.clear();
        }
    }

    /**
     * 添加一个周期任务
     *
     * @param key          任务键值
     * @param task         任务内容
     * @param initialDelay 延迟执行时间
     * @param period       执行周期
     * @param unit         时间单位
     * @return
     */
    public boolean addTask(@NotNull String key, @NotNull Runnable task, @NotNull long initialDelay,@NotNull long period,@NotNull TimeUnit unit) {
        //添加之前要保证存在这个运行任务不存在
        if(isHaveTask(key)) {
            System.out.println(key + " 键值对应的任务已经存在,添加失败。");
            return false;
        }
        //开启一个任务
        ScheduledFuture<?> scheduledFuture = pool.scheduleAtFixedRate(task, initialDelay, period, unit);
        //添加到列表之中
        allTask.put(key, scheduledFuture);
        return true;
    }

    /**
     * 删除一个任务
     *
     * @param key 运行任务键值
     * @return
     */
    public boolean deleteTask(@NotNull String key) {
        //删除之前要保证存在这个运行任务
        if(!isHaveTask(key)) {
            System.out.println(key + " 键值对应的任务不存在,删除失败。");
            return false;
        }
        ScheduledFuture<?> scheduledFuture = allTask.get(key);
        //停止改任务
        scheduledFuture.cancel(false);
        //从列表之中移除
        allTask.remove(key);
        return true;
    }

    /**
     * 修改一个任务
     *
     * @param key          运行任务键值
     * @param task         任务内容
     * @param initialDelay 延迟执行时间
     * @param period       执行周期
     * @param unit         时间单位
     * @return
     */
    public boolean updateTask(@NotNull String key, @NotNull Runnable task, @NotNull long initialDelay, @NotNull long period, @NotNull TimeUnit unit) {
        //修改之前要保证存在这个运行任务
        if(!isHaveTask(key)) {
            System.out.println(key + " 键值对应的任务不存在,修改失败。");
            return false;
        }
        ScheduledFuture<?> scheduledFuture = allTask.get(key);
        //停止改任务
        scheduledFuture.cancel(false);
        //根据新规则重新添加改任务
        ScheduledFuture<?> newScheduledFuture = pool.scheduleAtFixedRate(task, initialDelay, period, unit);
        //重新添加
        allTask.put(key, newScheduledFuture);
        return true;
    }

    /**
     * 判断此任务是否存在
     * @param key
     * @return
     */
    public boolean isHaveTask(@NotNull String key) {
        return allTask.containsKey(key);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OSS(阿里云对象存储服务)是阿里云提供的一种云存储服务,用于在云端存储和管理各种型的数据。在使用OSS服务时,我们可能会遇到需要管理对象的生命周期,即设置对象的存储周期,比如指定对象何时转为冷存储或删除的需求。为了方便开发者管理OSS对象的生命周期,阿里云提供了一种Java工具,即OSS声明周期工具。 OSS声明周期工具提供了一套简便的方式来设置OSS对象的生命周期规则。通过该工具,我们可以配置对象的存储周期,包括两个主要方面:转为低频访问存储和删除对象。其中,转为低频访问存储是指将对象从标准存储转移到低频访问存储,以降低成本,适用于长期不被频繁访问的对象;删除对象是指在一定时间后自动删除对象,以减少存储空间的占用。通过设置不同的规则和条件,可以实现对不同对象的不同管理策略。 使用OSS声明周期工具,我们可以通过代码的方式配置和管理OSS对象的存储周期,避免了手动操作的繁琐和错误。通过调用工具提供的API,我们可以设置存储周期的开始时间、转为低频访问存储的时间、删除的时间等各种参数,灵活满足不同的业务需求。此外,工具还提供了其他常用的方法,例如获取已配置的生命周期规则、启用或停用生命周期规则等等,方便开发者进行管理和操作。 总之,OSS声明周期工具为我们在阿里云OSS上管理对象的生命周期提供了便捷的方式。通过使用该工具,我们可以简化配置和管理的流程,提升效率,并且更好地满足不同对象的不同管理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值