【问题标题】:Timer in Java that doesn't pause the program?Java中的计时器不会暂停程序?
【发布时间】:2015-03-21 20:18:39
【问题描述】:

我想知道是否有一种我可以使用的计时器形式不会暂停我的所有代码Thread.sleep(ms) 不是我需要的,因为它会暂停我的所有代码。

编辑:好的,我想我用错了。这是我的编辑: 有没有办法在不暂停我的 main 方法的情况下测量 Java 中的一定时间?

【问题讨论】:

标签: java timer


【解决方案1】:

我喜欢使用Executors 类。它有一个很好的方法是newScheduledThreadPool。它给你一个ScheduledExecutorService 实例,它有很多调度方法。

在这里查看: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(threadToExecute, 10, TimeUnit.SECONDS);

此代码将在 10 秒后启动 threadToExecute thread,而不会暂停您的主线程。

【讨论】:

  • TimeUnit 不是可以导入的类。
  • 我没听懂。 import java.util.concurrent.TimeUnit;
  • 谢谢。 Control + Shift + O 不起作用。另外,什么是threadToExecute?能否举个例子。
  • 还有一件事:它说第一个参数是Runnable或Callable。我该如何使用这些?
  • 是执行的有效线程。大多数时候它是一个扩展Thread 的类。请看:docs.oracle.com/javase/tutorial/essential/concurrency
【解决方案2】:

取决于您使用的框架。一种非常通用的方法是启动一个新的Thread,通过 Thread.sleep(ms) 暂停该线程,然后在延迟之后做任何你想做的事情,但由于并发问题,这当然需要一点小心.

【讨论】:

  • 我确信 java 有一些内置的计时器 api
  • 你说得对,当然有,比如java.util.Timer。
  • 但是,有没有什么东西可以在不暂停程序的情况下测量时间?
  • 一个额外的线程而不是定时器(它做类似的事情)都不会暂停你的主线程,因此不会暂停程序......
【解决方案3】:

您可能想查看Timer 类。您可以将其附加到线程、安排事件并添加延迟。你可以用这个做的是你可以创建一个线程来沿着你的主线程运行并让它从那里运行。因为它们将位于两个完全不同的线程上,所以您不必担心它们会相互干扰。要运行另一个线程,您可以创建一个扩展 Thread 的类并运行它。然后使用Timer(String name)构造函数为线程创建一个Timer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多