我想问下·~~Timer在执行固定周期的TimerTask的时候~~~
是对TimerTask的同一对象的重复引用呢?还是每次都new新的对象(TimerTask),再执行?比如说Timer secondTimer=new Timer("SecondTimer");
secondTimer.scheduleAtFixedRate(new TestTask(1), 0, 4000L);
secondTimer.scheduleAtFixedRate(new TestTask(2), 7000L, 7000L);
secondTimer.scheduleAtFixedRate(new TestTask(3), 11000L, 11000L);
//其中TestTask是
public class TestTask extends TimerTask { private int type;
public TestTask(int type) {
// TODO Auto-generated constructor stub
this.type=type;
}
public void run() {
// TODO Auto-generated method stub
if (type==1) {
System.out.println("我4秒执行一次");
}else if (type==2) {
System.out.println("我7秒执行一次");
}else if (type==3) {
System.out.println("我11秒执行一次");
}else {
System.out.println("ERROR");
}

}
}
我想知道·Timer在实现这个的时候~~是相当于
while(到时间了){
new TestTask()
}
还是说~~~
task=new TestTask
while(到时间了){
task.run
}因为我的继承TimerTask 的TestTask中会有一些相关的变量的操作·~所以比较在意这个问题·~
还有就是对于一个由Timer启动的TimerTask,它里面的资源需要同步么?
比如,只针对secondTimer.scheduleAtFixedRate(new TestTask(1), 0, 4000L);
我TestTask中type=1里面的局部变量需要同步么?
请各位大哥大姐给解惑~~

解决方案 »

  1.   

    Timer在实现这个的时候应该相当于:
    task=new TestTask
    while(到时间了){
    task.run
    }我TestTask中type=1里面的局部变量需要同步么?不需要同步的,因为type属于各自TestTask对象的成员,不会发送互斥。
      

  2.   

    Task的多次执行,都是在同一个线程里的。而且你这个type又是私有的,只在这个Task里面用到。
    不存在多线程执行的问题,因此不需要同步
      

  3.   

    to songj_ntyrs & redduke1202
    恩·~对于一个Timer启动的任务我明白了~~~还想问下·~我现在写的代码结构是这样的一个有声明Timer的执行类 main,从库表获取的多条定时记录(多于5条),假设有5种时间类型(年月日时分)。我定义了一个Timer实现1分钟执行一次,其他时间类型我使用计数器的方式~~
    一个extends TimerTask的TestTask,内部实现了5种定时信息的处理方法。也就是说·~我程序启动之后,一条记录会对应一个TestTask
    这样的话·~~多条记录如果是同类型的~~~那么他们之间应该不能做成同步的吧?
    是不是说我的那段执行代码不能调用全局变量呢?
      

  4.   

    上述说的没有涉及到多线程操作,不存在同步的现象,一条记录对应一个TestTask,属于各自的实例,当然可以用全局变量啦