解决:定时器运行状态下修改定时器周期。
一. 工具类
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() {@Overridepublic void run() {System.out.println("执行时间:"+ new Date());}};Timer timer = new Timer();timer.schedule(timerTaskUtil,0,2000);//10s后切换成每1s执行一次Thread.sleep(10000);//设置新周期timerTaskUtil.setPeriod(1000);//10s后再次切换成2s执行一次Thread.sleep(10000);//设置新周期timerTaskUtil.setPeriod(2000);}
