解决oracle分布式锁,利用oracle字段进行分布式锁,下面代码可以实现吗有什么问题吗...

public class LockTest extends SpringTestBase {

@Resource

private CommonMapper commonMapper;

@Test

public void lock() {

new LockThread(commonMapper, "lock1thread").start();

new LockThread(commonMapper, "lock2thread").start();

new LockThread(commonMapper, "lock3thread").start();

}

}public class LockThread extends Thread {

private CommonMapper commonMapper;

private String name;

public LockThread(CommonMapper commonMapper, String name) {

this.commonMapper = commonMapper;

this.name = name;

}

@Override

public void run() {

super.setName(name);

Object o = commonMapper.selectObjSql("select t.islock from mylock t where t.id='1' and t.name='test1'");

int lock = Integer.parseInt(o.toString());

System.out.println(lock);

if (lock == 0) {

System.out.println(super.getName() + "获取到了0 进行枷锁");

int i = commonMapper.updateSql(" update mylock t set t.islock=1 where t.id='1' and t.name='test1' and t.islock='0' ");

if (i > 0) {

System.out.println(super.getName() + "当前线程获取到锁");

/**

* 需要解决并的业务代码

*/

//释放锁

int unlock = commonMapper.updateSql(" update mylock t set t.islock=0 where t.id='1' and t.name='test1' and t.islock='1' ");

System.out.println(unlock > 0 ? "释放锁成功" : "释放锁失败");

} else {

System.out.println(super.getName() + "当前线程没有获取到锁");

}

} else {

System.out.println(super.getName() + "当前线程没有获取到锁!");

}

}

}

测试效果是可以,不知道有没有问题,请大佬赐教.

测试结果:

lock2thread获取到了0 进行枷锁

lock1thread当前线程获取到锁

lock3thread当前线程没有获取到锁

lock2thread当前线程没有获取到锁

释放锁成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值