java - 迭代时更新数据和 MySQL
问题描述
嗨,我有以下声明:
- 我们有 1 个后台线程,每 5 分钟从数据库(MySQL)读取数据,并将这些数据加载到静态 Map<String, List < String >>
- 我们有一个主要的 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 分钟,以便参考地图的更新。
解决方案
推荐阅读
- sas - SAS 自定义键 (F12) 清除但随后在没有命令的情况下运行脚本
- mysql - 将 Mediawiki 部署到 Azure:无 SSL 连接
- javascript - 如何在 React.JS 中正确交换数组元素?
- c++ - C++ 禁用子类中的重载运算符
- javascript - 带有 indexArray 的顶点不能正确连接三角形
- android - 升级到 Jetpack Compose Alpha 12 会导致 setContent 出现错误
- r - 如何解决数值积分中的“非数值参数..”错误?
- python - 在 Discord Bot 脚本中创建定时循环以重新加载网页(网络爬虫机器人)
- python - kivymd 扩展面板 - 如何创建具有不同内容的面板
- flask - 尽管设置了标头,但 Flask 仍然出现 CORS 错误