我正在寻找类似 JavaScript 的东西setTimeout
,但带有Runnable
, 具有以下限制:
- 每次超时不需要单独的专用线程。
- 已经开发和深思熟虑。
- 甚至可能包括其他功能。(取消超时?,等待什么?,异步 I/O?)
- 不需要任何 GUI 库。(Java FX/Swing/AWT 都内置了事件循环)
你有什么建议吗?
编辑:我找到了我要找的东西。如果有一个库还包含与非阻塞或异步 I/O 相关的内容,那将是一个加分项。
我正在寻找类似 JavaScript 的东西setTimeout
,但带有Runnable
, 具有以下限制:
你有什么建议吗?
编辑:我找到了我要找的东西。如果有一个库还包含与非阻塞或异步 I/O 相关的内容,那将是一个加分项。
您可能正在寻找ScheduledThreadPoolExecutor:
我不太了解计划的可运行对象和事件循环之间的联系,但也许你会在这个类中找到你正在寻找的东西。
您可以使用 java.util.Timer
http://docs.oracle.com/javase/6/docs/api/java/util/Timer.html http://docs.oracle.com/javase/6/docs/api/java/util/TimerTask.html
您可以设置任务只运行一次或定期运行。您还可以停止/取消单个 TimerTask 或所有任务。
如果您正在 Java 中寻找一个简单的 node.js 样式的事件循环,ThreadPoolExecutor是一个好的开始。
查看ThreadPoolExecutor的 javadoc 中提到的Executors工厂,特别是Executors.newSingleThreadExecutor()。这为您提供了一个后台线程(如 Node 事件循环:请参阅此问题的答案),您可以向其提交任务。
对于异步 IO,处理阻塞活动的任务需要拆分线程(或执行程序)并使用Future将结果提交回事件循环。
我认为 Vert.x 是您所需要的,它是事件驱动且非阻塞的。