我正在编写一个简单的练习应用程序,我希望每N分钟显示一条消息然后再睡一会儿。
我的问题:设计具有此功能的应用程序的最有效方法是:睡一会儿,然后醒来做某事。我是学生,在学校我们用线程编写应用程序,在编写基本内核后,我理解了一些基本的调度和时间切片。
我的目标是更好地了解如何编写占用空间非常小的小程序(以及如何在这个小例子中达到这么小的占用空间),但可以运行数周。
我觉得理想情况下我希望这个过程不会运行N分钟,然后在经过一些时间片后唤醒(通过操作系统),但我不确定除了sleep()之外还有另一种方法。我用Java编写它,但是如果那些可以做得更好的话我可以使用C或Python(我认为这不重要)。我还在研究,但我想我也会从社区中得到一些暗示。
该程序是一个简单的提醒,告诉我伸展和使用一个站立的办公桌。 :)了解更好的线程是实际目标。
答案 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>);