为什么不会输出:("该任务已经在执行!");呢package com;import java.util.Timer;public class Runner {
public void go(){
Timer timer=new Timer();
timer.schedule(new MyTask(), 0, 1*1000);
Timer timer1=new Timer();
timer1.schedule(new MyTask(), 0, 2*1000);
}
public static void main(String[] args) {
Runner r1=new Runner();
r1.go();
}}package com;
import java.util.TimerTask;
public class MyTask extends TimerTask {
private static boolean isRunning=false;
@Override
public void run() {
if(!isRunning){
isRunning=true;
System.out.println("输出!");
isRunning=false;
}else{
System.out.println("该任务已经在执行!");
}
}}
public void go(){
Timer timer=new Timer();
timer.schedule(new MyTask(), 0, 1*1000);
Timer timer1=new Timer();
timer1.schedule(new MyTask(), 0, 2*1000);
}
public static void main(String[] args) {
Runner r1=new Runner();
r1.go();
}}package com;
import java.util.TimerTask;
public class MyTask extends TimerTask {
private static boolean isRunning=false;
@Override
public void run() {
if(!isRunning){
isRunning=true;
System.out.println("输出!");
isRunning=false;
}else{
System.out.println("该任务已经在执行!");
}
}}
你创建了两个MyTask实例,他们分别操作自己的isRunning
你没有看到文字输出,应该是MyTask中Run方法执行快导致,你试着在Run方法中,现有的代码前面,加一段执行耗时一段代码,比如加一个for循环等等,应该就可以看到该任务已经在执行!这句话了。
声明为static ,即为类域,所有实例共享,没有操作自己的isRunning的说法!关键是没有同步锁等处理,方法执行时间相对很短,所以比较不容易出现else分支。 isRunning=true;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("输出!");
isRunning=false;这样的话几率就大多了。