From 82cdb77fbfce0c5d37e4914a066ee5111cc341b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=9F=922012?= <345849402@qq.com> Date: Tue, 15 May 2018 19:15:39 +0800 Subject: [PATCH] =?UTF-8?q?zk=E5=88=86=E5=B8=83=E5=BC=8F=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../distributedlock/zookeeper/ZkLockUtil.java | 28 +++++-------------- .../impl/SeckillDistributedServiceImpl.java | 4 +-- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/itstyle/seckill/distributedlock/zookeeper/ZkLockUtil.java b/src/main/java/com/itstyle/seckill/distributedlock/zookeeper/ZkLockUtil.java index 07a838d..0c579c2 100644 --- a/src/main/java/com/itstyle/seckill/distributedlock/zookeeper/ZkLockUtil.java +++ b/src/main/java/com/itstyle/seckill/distributedlock/zookeeper/ZkLockUtil.java @@ -23,35 +23,21 @@ public class ZkLockUtil{ client = CuratorFrameworkFactory.newClient(address, retryPolicy); client.start(); } - /** - * 私有的默认构造子,保证外界无法直接实例化 - */ - private ZkLockUtil(){}; - /** - * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例 - * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载 - */ - private static class SingletonHolder{ - /** - * 静态初始化器,由JVM来保证线程安全 - */ - private static InterProcessMutex mutex = new InterProcessMutex(client, "/curator/lock"); - } - public static InterProcessMutex getMutex(){ - return SingletonHolder.mutex; - } + //获得了锁 - public static void acquire(){ + public static void acquire(String lockKey){ try { - getMutex().acquire(); + InterProcessMutex mutex = new InterProcessMutex(client, "/curator/lock/"+lockKey); + mutex.acquire(); } catch (Exception e) { e.printStackTrace(); } } //释放锁 - public static void release(){ + public static void release(String lockKey){ try { - getMutex().release(); + InterProcessMutex mutex = new InterProcessMutex(client, "/curator/lock/"+lockKey); + mutex.release(); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/com/itstyle/seckill/service/impl/SeckillDistributedServiceImpl.java b/src/main/java/com/itstyle/seckill/service/impl/SeckillDistributedServiceImpl.java index 20b2ddf..7f64a02 100644 --- a/src/main/java/com/itstyle/seckill/service/impl/SeckillDistributedServiceImpl.java +++ b/src/main/java/com/itstyle/seckill/service/impl/SeckillDistributedServiceImpl.java @@ -56,7 +56,7 @@ public class SeckillDistributedServiceImpl implements ISeckillDistributedService @Transactional public Result startSeckilZksLock(long seckillId, long userId) { try { - ZkLockUtil.acquire(); + ZkLockUtil.acquire(seckillId+""); String nativeSql = "SELECT number FROM seckill WHERE seckill_id=?"; Object object = dynamicQuery.nativeQueryObject(nativeSql, new Object[]{seckillId}); Long number = ((Number) object).longValue(); @@ -75,7 +75,7 @@ public class SeckillDistributedServiceImpl implements ISeckillDistributedService } catch (Exception e) { e.printStackTrace(); } finally{ - ZkLockUtil.release(); + ZkLockUtil.release(seckillId+""); } return Result.ok(SeckillStatEnum.SUCCESS); }