我在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);
}
}
答案 0 :(得分:1)
你有三个任务;而且他们的想法是彼此独立运行。如果你想让他们同步"不知何故;那么,你必须使用一些表单同步。
有很多方法可以实现这一目标。 Java中的对象可以使用wait / notify来创建这样的逻辑;或者他们可以使用某种形式的队列对象来交换"这样的信息。
答案 1 :(得分:0)
您可以使用synchronized代码块执行此操作。 试试这个
public void run() {
synchronized(this) {
System.out.print(x);
counter++;
if(counter>=10)
myTimer.cancel();
}
}
}