2014-10-10 93 views
1

从我的线程中,我应该每x秒钟一件事。例如。让x=3,它应该在几秒钟1, 4, 7, ...做到这一点。查找系统时钟 - Java

使得螺纹wait()x秒不会do--,因为它可能会中断其他的东西(一个或多个)在此x秒 期间做的,因此无法跟踪的之间传递的时间它应该的方式。 所以,线程应该想出一个有效的方式让自己知道时钟已经过去了012秒。

这样做的有效方法是什么?

我现在唯一的方法是不断检查系统时钟,以确定它是第二个1还是4或7,即第二个i其中i%3==1。 但是,这太浪费了,并不是什么好事。

这样做的最好方法是什么?

TIA。

// ====================

编辑:

我认为这将我查找系统时钟的方法和每隔一段时间都会打断我。

Java是否有这样的方法?

+0

你是在找[定时器](http://docs.oracle.com/javase/8/docs/api/java/util/Timer.html)?可能是'scheduleAtFixedRate'方法之一? – ajb 2014-10-10 00:26:25

+0

@ajb将看到计时器。你所做的事似乎也可以,但是我宁愿去做什么,如果有Java的话 – Roam 2014-10-10 00:31:43

回答

0

我不确定你想要做什么 - 这样的事情?

boolean interrupted; 
long endWait = System.currentTimeMillis() + 3000; // or 1000 * x 
do { 
    interrupted = false; 
    long timeRemaining = endWait - System.currentTimeMillis(); 
    if (timeRemaining <= 0) { 
     break; 
    } 
    try { 
     Thread.sleep(timeRemaining); 
    } catch (InterruptedException e) { 
     ... what you need to do when interrupted 
     interrupted = true; 
    } 
} while (interrupted);