解决:TimerTask在运行情况下动态改变执行周期
一. 工具类
public abstract class TimerTaskUtil extends TimerTask {
public void setPeriod(long period) {
//缩短周期,执行频率就提高
setDeclaredField(TimerTask.class, this, "period", period);
}
//通过反射修改字段的值
private boolean setDeclaredField(Class<?> clazz, Object obj, String name, Object value) {
try {
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
field.set(obj, value);
return true;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
}
二. 测试类
public static void main(String[] args) throws InterruptedException {
TimerTaskUtil timerTaskUtil = new TimerTaskUtil() {
@Override
public void run() {
System.out.println("执行时间:"+ new Date());
}
};
Timer timer = n

文章介绍了一个名为TimerTaskUtil的工具类,该类扩展了TimerTask并提供了一个方法setPeriod来通过反射改变TimerTask的执行周期。在测试类中,创建了一个TimerTask实例,初始设置为每2秒执行一次。然后在程序运行过程中,通过调用setPeriod方法改变了执行周期,分别设置为每1秒和每2秒执行一次。
最低0.47元/天 解锁文章
1896

被折叠的 条评论
为什么被折叠?



