你如何每x分钟有效地重复一次动作?

时间:2009-11-23 16:37:06

标签: java jboss

我有一个在JBoss中运行的应用程序。我有一个传入的Web服务请求,它将更新ArrayList。我想每隔60秒从另一个班级轮询这个列表。这样做最有效的方法是什么?

有人能指出一个很好的例子吗?

6 个答案:

答案 0 :(得分:15)

我还建议ScheduledExecutorService,它提供了比TimerTimerTask更高的灵活性,包括使用多个线程配置服务的能力。这意味着如果特定任务需要很长时间才能运行,则不会阻止其他任务开始。

// Create a service with 3 threads.
ScheduledExecutorService execService = Executors.newScheduledThreadPool(3);

// Schedule a task to run every 5 seconds with no initial delay.
execService.scheduleAtFixedRate(new Runnable() {
  public void run() {
    System.err.println("Hello, World");
  }
}, 0L, 5L, TimeUnit.SECONDS);

答案 1 :(得分:9)

发布abyx时,TimerTimerTask是以一定间隔运行类的轻量级解决方案。如果您需要重型调度程序,我可以建议Quartz。它是一个企业级作业调度程序。它可以轻松处理数千个预定的工作。就像我说的那样,这可能对你的情况有点过分了。

答案 2 :(得分:5)

您可以使用TimerTimerTask。示例显示为here

答案 3 :(得分:0)

请参阅java.util.Timer。当你的应用出现并让它进行轮询时,你需要在一个单独的线程中启动一个机器人。

答案 4 :(得分:0)

检查问题"How to run a task daily from Java"的答案,以获取与您的问题相关的资源列表。

答案 5 :(得分:0)

其他答案基本上建议你做自己的线程。没有错,但它不符合EJB规范。如果这是一个问题,你可以使用JBoss的计时器工具。 Here是如何做到这一点的一个例子。

但是,如果EJB规范存在争议,那么像ArrayList这样的存储状态也不合规,所以如果你只是读取一些静态变量,特别是使用容器定时服务可能有点过分。