定时器执行期间是否可以改变时间

java定时器在执行期间 我改变了定时器的执行周期时间 那么这个定时器是否按改变的执行周期执行呢 如果不行 那么需要怎么改变

定时器的执行周期呢

[code="java"]resetPeriod(time); [/code]
赋值错了,应该是
[code="java"]resetPeriod(newTime); [/code]
莫怪。

会改变。但是是下个周期开始改变,当前周期还是不会中止调的。
要想立马中止,那只能cancel掉然后重新调度。

真的是可以的,亲。
[code="java"]
public class TimerTaskTest
{

public static Timer timer = new Timer();

private final static long SENCOND = 1000l;

public static void main(String[] args) throws InterruptedException,
        IllegalArgumentException, IllegalAccessException
{
    Task task = new Task();
    timer.schedule(task, 1 * SENCOND, 1 * SENCOND);
    Field[] fields = task.getClass().getSuperclass().getDeclaredFields();
    for (Field field : fields)
    {
        if (field.getName().endsWith("period"))
        {
            if (!field.isAccessible())
            {
                field.setAccessible(true);
            }
            field.set(task, 5 * SENCOND);
        }
    }
}

public static class Task extends TimerTask
{

    @Override
    public void run()
    {
        System.out.println("run task");
    }

}

}
[/code]

建议设计一张表,专拿来存放执行时间..之类可能存在变化的东西.

这样就不会很被动的每次都需要去改工程,听服务,什么的...

只需要改下数据库就好

[quote]long time=5l;
Task task = new Task();

timer.schedule(new Timertask(){
public void run()
{
time=config.getvalue();//这个时间是动态加载的

}

}, 0, time * 60*1000);

上面这个定时器time是每次都改变的,但是定时器执行周期没变啊? [/quote]
一样的写法:
[code="java"]
final long time = 5l;
Task task = new Task();
timer.schedule(new TimerTask()
{
public void run()
{
long newTime = config.getvalue();// 这个时间是动态加载的
if (time != newTime)
{
resetPeriod(time);
}
}

        public void resetPeriod(final long time)
        {
            Field[] fields = this.getClass().getSuperclass()
                    .getDeclaredFields();
            for (Field field : fields)
            {
                if (field.getName().endsWith("period"))
                {
                    if (!field.isAccessible())
                    {
                        field.setAccessible(true);
                    }
                    field.set(this, time * 60 * 1000);
                }
            }
        }

    }, 0, time * 60 * 1000);

[/code]