【问题标题】:Keeping track of currentTimeMillis跟踪 currentTimeMillis
【发布时间】:2012-11-14 05:16:33
【问题描述】:

我需要创建一个对象,该对象将使用它自己的类方法在一段时间内停止执行。如何让程序跟踪经过的时间并在经过指定的时间后执行函数。

我想......

long pause; //a variable storing pause length in milliseconds.............
long currentTime; // which store the time of execution of the pause ,............. 

当另一个变量跟踪时间的值与 currentTime + pause 相同时,执行下一行代码。是否有可能让一个变量在短时间内随着时间的推移每毫秒变化一次?

【问题讨论】:

  • 我不能使用任何线程 :\ 进行分配
  • @FredV 技术上,你已经是了,你的代码已经在线程中执行了,你不需要做任何事情......
  • 是啊是啊!它没有在限制中明确提及:D!
  • Thread.sleep() 是一个静态方法。它不创建任何线程,它使 current 线程(调用它的线程)休眠。每个 Java 程序都从一个运行main() 方法的线程开始;当人们谈论“使用线程”时,他们的意思是在最初的线程之外创建其他线程。
  • “不要使用 Java Thread 类,而是考虑如何使用简单的技术停止程序。”

标签: java stopwatch


【解决方案1】:

对于一个简单的解决方案,您可以使用Thread#sleep

public void waitForExecution(long pause) throws InterruptedException { 
    // Perform some actions...
    Thread.sleep(pause);
    // Perform next set of actions
}

带有计时器...

public class TimerTest {

    public static void main(String[] args) {
        Timer timer = new Timer("Happy", false);
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                System.out.println("Hello, I'm from the future!");
            }
        }, 5000);

        System.out.println("Hello, I'm from the present");
    }
}

还有一个循环

long startAt = System.currentTimeMillis();
long pause = 5000;
System.out.println(DateFormat.getTimeInstance().format(new Date()));
while ((startAt + pause) > System.currentTimeMillis()) {
    // Waiting...
}
System.out.println(DateFormat.getTimeInstance().format(new Date()));

注意,这比其他两个解决方案更昂贵,因为循环继续消耗 CPU 周期,而 Thread#sleepTimer 使用允许线程空闲(而不消耗周期)的内部调度机制

【讨论】:

  • 呃,我知道他想要 for 循环。我将测试 n 小提琴,非常感谢@MadProgrammer 的指导 :)
  • 您可以在while 循环中表现得很好并调用Thread#yield,这至少会给系统中的其他线程一个运行的机会,但这可能会超出您的尝试实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2015-04-09
  • 2011-04-04
  • 2014-05-02
相关资源
最近更新 更多