java - sleep 应用设计

标签 java multithreading

我正在编写一个简单的练习应用程序,我想每 N 分钟显示一条消息,然后 hibernate 一段时间。

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

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

  • 我可以在 Java 中使用 Thread.sleep(N) 或等效方法。但这并不能保证 sleep 的精确度,事实上(根据我读到的),可能不会睡近 N 秒。类似this的文章似乎不鼓励 sleep()。
  • 我考虑过创建一个线程,我可以发出信号以每 N 秒唤醒它。但随后 main() 线程将不断工作并计算时间。这也非常浪费,因为我会在计算时间上浪费周期。

我想理想情况下我希望进程不要运行 N 分钟,然后在一定数量的时间片后唤醒(由操作系统),但我不确定除了 sleep() 之外还有其他方法可以做到这一点。我正在用 Java 编写它,但如果 C 或 Python 可以做得更好,我可以使用它们(我觉得这不重要)。我仍在研究,但我想我也会从社区得到提示。

该程序是一个简单的提醒,告诉我拉伸(stretch) body 并使用站立式办公 table 。 :) 真正的目标是更好地理解线程。

最佳答案

围绕 Thread.sleep 的评论实际上比您的用例所需要的更精确,IMO。 Thread.sleep 应该足够精确以满足您的需求。你可以看看ScheduledThreadPoolExecutor这使您摆脱了一些具体的线程管理,随着程序复杂性的增加,这很容易出错。

关于java - sleep 应用设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442803/

相关文章:

C++ 无锁队列因多线程而崩溃

python - 如何等待进程池有空闲的 worker

C++:多线程和引用计数对象

java - 通过套接字发送图像而不关闭套接字

java - Hibernate Converter + 在 Converter 中检索属性名

java - 为什么 java.util.Arrays 使用两种排序算法?

java - 在没有锁定的情况下从多个线程写入同一个文件,Java

java - 猜谜游戏中的随机数

java - 当第一位为 1 时,8 位字符串上的 parseInt 返回负值

java - 如何使用多线程生成数据?