判断执行方法

比如说我有一个方法A() { System.out.println("123");}
有三个类要调用这个方法。
要求是当第一个类执行过这个方法之后。第二个类必须2分钟之后才能执行这个方法,第三个类必须等第二个类执行结束后2分钟再执行这个方法。然后第一个类在第三个类执行2分钟后再次执行这个方法,依次循环
这该如何实现呢。

你描述的场景也不是非常明确, 大概这样吧
[code="java"]
import java.util.Date;

public class DelayLock {
private final Object lockObj = new Object(); // 锁对象

private final long DELAY; // 间隔毫秒
private volatile long lastCompleteTime = -1; // 上次任务结束的时间

private volatile boolean running = false; // 当前是否有任务在执行

public DelayLock(int DELAY) {
    this.DELAY = DELAY;
}

public void lock() throws InterruptedException {
    synchronized (lockObj) {
        while(true) {
            if(running) {
                lockObj.wait();
            } else if(System.currentTimeMillis() - DELAY < lastCompleteTime) {
                lockObj.wait(DELAY);
            } else {
                break;
            }
        }
        running = true;
    }
}

public void unlock() {
    synchronized (lockObj) {
        running = false;
        lastCompleteTime = System.currentTimeMillis();
        lockObj.notifyAll();
    }
}

public static class TestClass implements Runnable {
    private final DelayLock lock;
    private int index;
    public TestClass(DelayLock lock, int index) {
        this.lock = lock;
        this.index = index;
    }
    public void testMethod() throws InterruptedException {
        lock.lock();
        try {
            System.out.println("Thread: " + index + ": begin. at: " + new Date());
            Thread.sleep(1000);
            System.out.println("Thread: " + index + ": job done! at: " + new Date());
        } finally {
            lock.unlock();
        }
    }
    public void run() {
        try {
            testMethod();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

public static void main(String[] args) {
    DelayLock lock = new DelayLock(5 * 1000); // 5秒钟

    for(int i = 0; i < 5; ++i) {
        TestClass t = new TestClass(lock, i);
        new Thread(t).start();
    }
}

}

[/code]

直接上代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Main {
public static void s() throws Exception
{

   Thread workThread = new Thread();
      workThread.start();
      while(true)
      {
      A.aa();//这里只是一个调用的例子,具体根据实际方法来调用
      workThread.sleep(120000);
      B.aa();//这里只是一个调用的例子,具体根据实际方法来调用
      workThread.sleep(120000);
      C.aa();//这里只是一个调用的例子,具体根据实际方法来调用
      workThread.sleep(120000);
      }

}

public static void main(String[] args) {

    try {
        s();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

}

}