java - 让程序运行5分钟

标签 java timer timertask

所以我想尝试一下 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 。例如,考虑下面给出的代码: 该代码将执行 Runnable30 秒后的任务,最多 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/

相关文章:

java - 如何即时远程使用户的 servlet session 无效?

java - 如何防止将重复对象添加到 ArrayList

c# - 在 C# 中使用定时器

java TimerTask增加时间?

java - 这个字符数组java程序的输出

java - Selenium 在第二次测试中未识别元素

javascript - 定时器开始暂停和恢复

java - 更改操作系统日期和时间后线程 hibernate

Java TimerTask 具有时间、延迟和周期

java - 检查计时器是否有任何待处理的任务?