睡眠应用程序设计

时间:2016-02-16 20:56:14

标签: java multithreading

我正在编写一个简单的练习应用程序,我希望每N分钟显示一条消息然后再睡一会儿。

我的问题:设计具有此功能的应用程序的最有效方法是:睡一会儿,然后醒来做某事。我是学生,在学校我们用线程编写应用程序,在编写基本内核后,我理解了一些基本的调度和时间切片。

我的目标是更好地了解如何编写占用空间非常小的小程序(以及如何在这个小例子中达到这么小的占用空间),但可以运行数周。

  • 我可以在Java中使用Thread.sleep(N)或等效。但这并不能保证睡眠的准确性,事实上(从我读到的),可能无法在N秒内睡不着。像this这样的文章似乎不鼓励睡觉()。
  • 我考虑创建一个线程,我可以发出信号,每隔N秒唤醒一次。但是那时main()线程将不断工作并计算时间。这也是非常浪费的,因为我会在计算时间上浪费周期。

我觉得理想情况下我希望这个过程不会运行N分钟,然后在经过一些时间片后唤醒(通过操作系统),但我不确定除了sleep()之外还有另一种方法。我用Java编写它,但是如果那些可以做得更好的话我可以使用C或Python(我认为这不重要)。我还在研究,但我想我也会从社区中得到一些暗示。

该程序是一个简单的提醒,告诉我伸展和使用一个站立的办公桌。 :)了解更好的线程是实际目标。

4 个答案:

答案 0 :(得分:1)

关于Thread.sleep的评论实际上比你的用例更精确,IMO。 Thread.sleep应该足够精确以满足您的需求。您可以查看一个ScheduledThreadPoolExecutor,它可以帮助您摆脱一些细节线程管理,随着程序的复杂性增加,这很容易出错。

答案 1 :(得分:0)

查看docs

中的java Timer和TimerTask类

答案 2 :(得分:0)

 Well, From application perspective as you mentioned you can use the Thread.sleep(N). 
 However the accuracy totally relied on the underlying machine. 
 (Read the docs on http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#currentTimeMillis())
  You  can also use this SOF to get more options : http://stackoverflow.com/questions/824110/accurate-sleep-for-java-on-windows
 on the under relying machine. 

答案 3 :(得分:0)

休眠线程在大多数情况下是设计应用程序的一种不好的方法,在Java中,您可以定义定时器以定期执行应用程序。看起来像:

Timer timer = new Timer();
    timer.schedule(new TimerTask() {
       @Override
       public void run() {
             doStuff();
        }
    }, <delay>, <period>);