所以我想尝试一下 Timer 和 TimerTask 类。
我能够在 30 秒后执行一行代码。 我现在一直在尝试做的是让这行代码执行 5 分钟。
这是我最初尝试的
public static void main(String[] args)
{
for ( int i = 0; i <= 10; i ++ )
{
Timer timer = new Timer();
timer.schedule( new TimerTask()
{
public void run()
{
System.out.println("30 Seconds Later");
}
}, 30000
);
}
}
我在for循环中使用数字10来查看timer.schedule是否会在下一次循环迭代期间再等待30秒。
知道我该怎么做吗?我尝试使用 Schedule 方法并传入一个 period 参数,但这只会使其重新执行并且从未停止。
最佳答案
Java在java.util.concurrent
中提供了丰富的API集包来实现此类任务。这些 API 之一是 ScheduledExecutorService
。例如,考虑下面给出的代码: 该代码将执行 Runnable
每 30
秒后的任务
,最多 5
分钟:
import java.util.concurrent.*;
class Scheduler
{
private final ScheduledExecutorService service;
private final long period = 30;//Repeat interval
public Scheduler()
{
service = Executors.newScheduledThreadPool(1);
}
public void startScheduler(Runnable runnable)
{
final ScheduledFuture<?> handler = service.scheduleAtFixedRate(runnable,0,period,TimeUnit.SECONDS);//Will cause the task to execute after every 30 seconds
Runnable cancel = new Runnable()
{
@Override
public void run()
{
handler.cancel(true);
System.out.println("5 minutes over...Task is cancelled : "+handler.isCancelled());
}
};
service.schedule(cancel,5,TimeUnit.MINUTES);//Cancels the task after 5 minutes
}
public static void main(String st[])
{
Runnable task = new Runnable()//The task that you want to run
{
@Override
public void run()
{
System.out.println("I am a task");
}
};
Scheduler sc = new Scheduler();
sc.startScheduler(task);
}
}
关于java - 让程序运行5分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444982/