我正在尝试多线程导入作业,但遇到了导致重复数据的问题。我需要将我的地图保持在循环之外,以便我的所有线程都可以更新并从中读取,但是如果它没有最终版本,我就无法做到这一点,并且如果它是最终版本,我将无法更新地图。目前我需要将我的 Map 对象放在 run 方法中,但是当值最初不在数据库中并且每个线程创建一个新值时,问题就出现了。这会导致数据库中出现重复数据。有人知道如何进行某种回调以更新我在外面的地图吗?
ExecutorService executorService = Executors.newFixedThreadPool(10);
final Map<Integer, Object> map = new HashMap<>();
map.putAll(populate from database);
for (int i = 0; i < 10; i++) {
executorService.execute(new Runnable() {
public void run() {
while ((line = br.readLine()) != null) {
if(map.containsKey(123)) {
//read map object
session.update(object);
} else {
map.put(123,someObject);
session.save(object);
}
if(rowCount % 250 == 0)
tx.commit;
});
}
executorService.shutdown();