为什么Timer命令在java中同时工作

时间:2016-08-31 12:52:57

标签: java timertask

我在java中有关于Timer的问题。当我运行下面的代码时,同时打印a.start(0),a.start(1)和a.start(2),输出如02121010120010122012102 但我希望像00000001111111222222222

那样按顺序打印

怎么做?

public class Main {

public static void main(String[] args) {

    A a = new A();
    a.start(0);
    a.start(1);
    a.start(2);     
}

public class A {

public void start(int x)
{
    Timer myTimer=new Timer();
    TimerTask task=new TimerTask() {
        int counter=0;
           @Override
           public void run() {
                  System.out.print(x);
                  counter++;
                  if(counter>=10)
                         myTimer.cancel();
           }
    };

    myTimer.schedule(task,0,300);
}

}

2 个答案:

答案 0 :(得分:1)

你有三个任务;而且他们的想法是彼此独立运行。如果你想让他们同步"不知何故;那么,你必须使用一些表单同步。

有很多方法可以实现这一目标。 Java中的对象可以使用wait / notify来创建这样的逻辑;或者他们可以使用某种形式的队列对象来交换"这样的信息。

答案 1 :(得分:0)

您可以使用synchronized代码块执行此操作。 试试这个

public void run() {
    synchronized(this) {
        System.out.print(x);
        counter++;
        if(counter>=10)
            myTimer.cancel();
        }
    }
}