创建一个将在延迟后执行的线程

时间:2018-03-06 22:33:39

标签: java multithreading

如何创建一个在s秒延迟后执行的线程?

我希望在线程等待时运行其他进程。

例如,我想创建线程,然后打印出其他几个字符串,然后在s秒后,线程将运行。

我不需要的是整个程序等待s秒,然后一切都发生了。我需要在延迟时间内运行流程。

谢谢!

~Java首选

3 个答案:

答案 0 :(得分:6)

使用ScheduledExecutorService。请参阅下面的示例。

System.out.println("some stuff");

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
final Runnable task = new Runnable() {

    @Override
    public void run() {
        System.out.println("do something");
    }
};
Future<?> futureHandle = scheduler.scheduleWithFixedDelay(task, 10, 10, TimeUnit.SECONDS);

System.out.println("some other stuff");

任务安排的固定延迟为10秒,因此您将获得不在Runnable中的打印语句的输出,然后每隔10秒在Runnable中输出一次。

此示例中的输出是

有些东西
其他一些东西
做点什么 做点什么 ......

用&#34;做某事&#34;线条发生在10秒。最初10秒后的间隔。延迟。

要停止它,你可以创建一个&#34;停止&#34;将某种逻辑放入并注册的任务。

final Runnable stopTask = new Runnable() {
    @Override
    public void run() {
        futureHandle.cancel(true); // true: interrupt if necessary
    }
};
long delay = // some number, how long to wait before invoking the stop task
scheduler.schedule(stopTask, delay, TimeUnit.SECONDS).get(); // wait if necessary and get the future result
scheduler.shutdown(); // shutdown on completion

修改

如果你只需要运行一次任务,正如评论中所指出的那样,请考虑TimerTask

final Timer timer = new Timer();

final TimerTask task = new TimerTask() {

    @Override
    public void run() {
        System.out.println("timer task");
        timer.cancel(); // stop timer after execution
    }
};

timer.schedule(task, 1000); // schedule task with delay of 1000ms

答案 1 :(得分:0)

我建议你看一下quartz scheduler。这非常强大,并且在java环境中执行几乎类似的任务,如unix cron。 您可以随时查看有大量有关石英的在线教程。

答案 2 :(得分:0)

以下是Thread.sleep()的一个工作示例:

[['3/6/2018', '16', '8', '50.00', '3024', '1349', '44.61'], ['3/5/2018', '16', '9', '56.25', '3024', '2114', '69.91'], ['3/4/2018', '16', '9', '56.25', '3024', '2224', '73.54']]