4

我正在寻找类似 JavaScript 的东西setTimeout,但带有Runnable, 具有以下限制:

  • 每次超时不需要单独的专用线程。
  • 已经开发和深思熟虑。
  • 甚至可能包括其他功能。(取消超时?,等待什么?,异步 I/O?)
  • 不需要任何 GUI 库。(Java FX/Swing/AWT 都内置了事件循环)

你有什么建议吗?

编辑:我找到了我要找的东西。如果有一个库还包含与非阻塞或异步 I/O 相关的内容,那将是一个加分项。

4

5 回答 5

3

您可能正在寻找ScheduledThreadPoolExecutor

  • 你决定使用多少线程
  • 标准 JDK 类
  • 可取消的任务
  • 与任何 GUI 无关

我不太了解计划的可运行对象和事件循环之间的联系,但也许你会在这个类中找到你正在寻找的东西。

于 2011-12-30T19:06:34.090 回答
2

您可以使用 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 或所有任务。

于 2011-12-30T19:14:32.413 回答
1

如果您正在 Java 中寻找一个简单的 node.js 样式的事件循环,ThreadPoolExecutor是一个好的开始。

查看ThreadPoolExecutor的 javadoc 中提到的Executors工厂,特别是Executors.newSingleThreadExecutor()。这为您提供了一个后台线程(如 Node 事件循环:请参阅此问题的答案),您可以向其提交任务。

对于异步 IO,处理阻塞活动的任务需要拆分线程(或执行程序)并使用Future将结果提交回事件循环。

于 2012-10-16T10:05:49.273 回答
1

我认为 Vert.x 是您所需要的,它是事件驱动且非阻塞的。

于 2016-01-01T16:31:20.443 回答
0

有没有想过使用ThreadPoolExecutor的 awaitTermination API

tpe.awaitTermination(50, TimeUnit.SECONDS);

可能对你有用。

于 2011-12-30T19:04:28.223 回答