LegendAniu 2014-10-14 07:59 采纳率: 0%
浏览 2336

多线程更新多个表数据

更新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);
    }
    ...
  • 写回答

1条回答

  • -天宇 2014-10-16 11:29
    关注

    只要不多表连查就行。

    用Lock显示锁,countDownLatch在这种场景下不适合,浪费性能

    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64