首页 > 解决方案 > 迭代时更新数据和 MySQL

问题描述

嗨,我有以下声明:

  1. 我们有 1 个后台线程,每 5 分钟从数据库(MySQL)读取数据,并将这些数据加载到静态 Map<String, List < String >>
  2. 我们有一个主要的 while(true) 迭代这个 Map<String,List< String >> 引用是这样获得的:Manager.getInstance().getDataMap();

执行以下代码:

Map<String, List<String>> data = Manager.getInstance().getDataMap();

data.forEach((s, values) -> {
  logger.info("Info Key -> {}", s);
  for (String value : values) {
      executorService.execute(new TT(value));
  }
});

如您所见,我们有一个执行器服务,其定义如下:

BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(concurrent);
ThreadPoolExecutor executorService = new ThreadPoolExecutor(concurrent, concurrent, 0L, TimeUnit.MILLISECONDS, workQueue);

// when the blocking queue is full, this tries to put into the queue which blocks
executorService.setRejectedExecutionHandler((r, executor) -> {
    try {
        // block until there's room
        executor.getQueue().put(r);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        throw new RejectedExecutionException("Producer thread interrupted", e);
    }
});

该程序处理每个键的每个值,每个值可能需要很多时间。我想要完成的事情是在对数据库进行更新时,例如删除或创建或修改新条目,然后更新迭代,以便在同一迭代中添加或删除值,因为我们最多可能需要 N 分钟,以便参考地图的更新。

标签: javamysqlsqlmultithreadingexecutorservice

解决方案


推荐阅读