对Java事件循环库的建议

时间:2011-12-30 18:50:18

标签: java event-loop

我正在寻找类似JavaScript setTimeout但有Runnable的内容,但有以下限制:

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

你有什么建议吗?

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

5 个答案:

答案 0 :(得分:2)

您可能正在寻找ScheduledThreadPoolExecutor

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

我不太了解预定的runnables和一个事件循环之间的联系,但也许你会发现你正在寻找这个类。

答案 1 :(得分: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或所有任务。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

您是否考虑过使用ThreadPoolExecutor

的awaitTermination API
tpe.awaitTermination(50, TimeUnit.SECONDS);

可能对您有用。

答案 4 :(得分:0)

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