2014-07-24 30 views
4

我有一个线程,我想在每15分钟后运行一次。目前我打电话给这个线程从另一个类似如何在特定时间后继续运行线程

Class B{ 
public void start(){ 
while(true){ 
new Thread(new A()).start(); 
    } 
} 
} 

Class A implements Runnable{ 
    @override 
    public void run(){ 
    //some operation 
    } 
} 

我怎样才能每15分钟调用线程A.

+0

为什么不'睡眠()'15分钟? – TheLostMind

+0

我不知道如何使用 – Ashish

+0

你不能_call_一个线程。你可以通过创建一个新的Thread对象t来创建一个线程,然后调用t.start()。不过,您不能重新使用Thread对象:您可以只调用一次start(),然后如果您想再次执行相同的操作,则必须再次创建一个新的Thread对象。 –

回答

4

您可以使用TimerScheduledExecutorService的间隔重复的任务。

ExecutorService这个ExecutorService可以安排命令在给定的延迟后运行或定期执行。

示例代码:

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); 

executorService.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
     System.out.println("Asynchronous task"); 
    } 
}, 0, 15, TimeUnit.MINUTES); 

查找more examples...

+0

谢谢我认为我喜欢它 – Ashish

2

使用睡眠是这样的:

public void run(){ 
    while(true){ 
    // some code 
    try{ 
     Thread.sleep(15*60*1000) // sleep for 15 minutes 
     } 
    catch(InterruptedException e) 
    { 
    } 
    } 
    } 
+0

大声笑..有类似的答案;) –

+0

@OrelEraki - :P – TheLostMind

+0

非常感谢。 – Ashish

0

启动时它不能再次启动。

您可以将Thread.Sleep(15*60*1000)放在run函数中,以使其睡眠并将其与周围环绕,以便再次循环。

3

看看TimerTimerTask

一个线程的工具,用于在后台线程中安排将来执行的任务。可以安排一次性执行任务,或定期重复执行任务。

2

替代选项使用类java.util.Timer

Timer time = new Timer(); 
ScheduledTask st = new ScheduledTask(); 
time.schedule(st, 0, 15000); 

public void scheduleAtFixedRate(TimerTask task,long delay,long period); 

甚至

java.util.concurrent.ScheduledExecutorService的方法

schedule(Runnable command, long delay, TimeUnit unit) 
0

我认为Timer会做雅。

import java.util.Timer; 
import java.util.TimerTask; 

    class A extends TimerTask { 
    @Override 
    public void run(){ 
     //some operation 
    } 
    } 

    A task = new A(); 
    final long MINUTES = 1000 * 60; 
    Timer timer = new Timer(true); 
    timer.schedule(task, 15 * MINUTES, 15 * MINUTES);