我正在开发一个多线程项目,我希望有一个类可以在每次方法调用后延迟来自所有线程的方法调用一段时间的冷却时间。例如,给定类:
public class Printer {
protected void cooldown(long ms) {
// ???
}
public synchronized void print(String str) {
System.out.println(str);
cooldown(1000);
}
}
我想要三个调用以print()
每隔一秒打印三个值。虽然这可以很容易地完成Thread.currentThread().sleep(ms)
,但问题是我希望调用线程继续执行。为了澄清,给出以下示例:
public static void main(String[] args) {
final Printer p = new Printer();
new Thread(new Runnable() {
public void run() {
p.print("foo");
System.out.println("running foo");
}
}).start();
new Thread(new Runnable() {
public void run() {
p.print("bar");
System.out.println("running bar");
}
}).start();
}
我希望foo,running foo和running bar立即打印(以任何顺序),然后是bar一秒钟后。有人知道获得这种功能的好方法吗?
编辑:
这个Printer
类是我能想到的这个问题的最简单的例子,但实际上,这个类将有多种方法,都需要共享冷却时间。在此期间调用其中一种方法将延迟其他方法的执行。该类甚至可能具有共享相同冷却时间的方法的子类。