为什么不会输出:("该任务已经在执行!");呢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("该任务已经在执行!");
}
}}

解决方案 »

  1.   

    不是说一个Timer一个线程么,我new了2个timer应该有2个线程,我想做的是但第一个线程执行任务a时,如果第二个线程也要执行该任务,那么就不允许执行
      

  2.   

    new MyTask();
    你创建了两个MyTask实例,他们分别操作自己的isRunning
      

  3.   

    从代码上来看,可以输出:该任务已经在执行!这句话。
    你没有看到文字输出,应该是MyTask中Run方法执行快导致,你试着在Run方法中,现有的代码前面,加一段执行耗时一段代码,比如加一个for循环等等,应该就可以看到该任务已经在执行!这句话了。
      

  4.   

    为什么一个循环中给 isRunning赋两个值啊
      

  5.   


    声明为static ,即为类域,所有实例共享,没有操作自己的isRunning的说法!关键是没有同步锁等处理,方法执行时间相对很短,所以比较不容易出现else分支。                isRunning=true;
                    
                    try {
         Thread.sleep(1000);
         } catch (InterruptedException e) {
         e.printStackTrace();
         }
                    System.out.println("输出!");
                    isRunning=false;这样的话几率就大多了。