更新A、B、C等多张表数据,而且这些更新需要在同一个事务里保证一致性,这些表没有关联关系。能否使用多线程的方式实现,我试试下列方法在更新数据时会出现死锁,一个表执行完update语句后另外一个线程在执行时connection就会等待,以为第一执行的线程未提交事务countDownLatch.await()也等待,这样就一直等待死锁。这种场景能使用多线程吗,有没有其它好的解决方案?
...
final CountDownLatch countDownLatch = new CountDownLatch(
moduleTableList.size());
for (final ModuleTable moduleTable : moduleTableList) {
Thread t = new Thread(moduleTable.getTableName()) {
@Override
public void run() {
TransactionStatus transactionStatus = null;
try {
transactionStatus = beginTransaction();
...//更新数据
} catch (Throwable t) {
orgChangeInfo.setError(true);
...
} finally {
countDownLatch.countDown();
try {
countDownLatch.await();
} catch (InterruptedException e) {
logger.error("InterruptedException", e);
}
if (transactionStatus != null) {
if (orgChangeInfo.isError()) {
jtaTransactionManager
.rollback(transactionStatus);
} else {
jtaTransactionManager
.commit(transactionStatus);
}
}
}
}
};
t.start();
}
try {
countDownLatch.await();
} catch (InterruptedException e) {
logger.error("InterruptedException", e);
}
...