1

我想按照顺序在我的线程中运行许多任务,这是我的应用程序的主线程:

@Component
public class LogExtractorApp extends CommonApp implements Runnable {

    UDPReceiver receiver = new UDPReceiver();

    public static Map<String, Entity> select;
    public static List<String> pdomain;

    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    @Resource
    MessagesCounts counters;

    @Resource
    DbUpdating update;

    @Resource
    DeleteData delete;

    @Resource
    ExcludeDomain domain;   

    @Override
    public void run() {
       select = counters.main();
       pdomain = domain.main();
       ExecutorService service = Executors.newCachedThreadPool();
       service.execute(receiver);
       scheduler.scheduleAtFixedRate(update, 5, 5, TimeUnit.MINUTES);
       service.execute(delete);
    }
}

当我启动应用程序时我想要的是以下内容:

  1. 调用计数器的主要方法。
  2. 调用域的主要方法。
  3. 启动线程“接收器”,该线程从远程服务器永久接收数据。
  4. 启动一个计划的线程以每 5 分钟更新一次数据库。
  5. 回忆一下计数器的主要方法。(我在这里提到映射“select”用于线程“receiver”调用的方法)。
  6. 启动线程“delete”以删除数据库中早于 1 天的所有数据。

*我当然希望三线永久转动*

我的问题:步骤 1、2、3、4 工作正常,但我不知道如何告诉我的应用程序每次在“更新”线程后调用“计数器”的主要方法来更新我的地图的值( “选择”)。对于“删除”线程,我曾经按照上面代码中显示的方式添加它,但它不是这样工作的。我很感激对我的 2 个问题的任何建议,如果我必须添加任何其他代码问题,请通过评论告诉我。

谢谢!

4

1 回答 1

1

对于第 5 步,timerTask 类可以提供帮助,参考:http ://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html 请参阅 java 文档了解更多信息。

如果你延长 timerTask 它也可以执行第 6 步,但是还有另一个用于调度 java 任务的简洁工具 Quartz, http: //quartz-scheduler.org/ 你可以在他们的网站上找到更多关于配置的信息。

于 2013-11-07T09:22:48.987 回答