博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DB Locker

Posted on 2012-08-09 21:22  钟悍  阅读(305)  评论(0编辑  收藏  举报
LockType public void lock(LockType lockType) {             
        try {
            entityManager.find(LockEntity.class, lockType, LockModeType.PESSIMISTIC_WRITE);
        } catch (Exception e) {
            Logger.Error("Failed to find LockEntity by LockType(" + lockType.name() + ") because of DB error.");
            Logger.Debug("ConfigDbManagerImpl:lock", e);
            DBAlarmHelper.raiseAlarm(e);
            throw e;
        }
        DBAlarmHelper.clearAlarm();
}

 

public void test() throws Exception {
        locker.lock(
 
LockType.AddMessage );
        ...........
        ...........

 

    当第一个线程进入test()方法时, 会调用lock方法,从而使用悲观锁锁住该列。 当第二个线程又进入test()方法时, 也想要尝试会的AddMessage的这列,这是就需要等待第一个线程退出test()方法,才能获得该锁。