redis做分布式锁

    xiaoxiao2022-07-13  143

    //reids做分布式锁要用到redisson框架。以下的代码用多线程来模拟多个进程访问统一资源 package com.inspur.inspurTest.test.redis; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.redisson.Redisson; import org.redisson.api.RedissonClient; /** * author yulinshan * time 2019/5/23 **/ public class RedisssonLockTest { static int fixNum = 5 ; public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(fixNum); RedissonClient redissonClient = Redisson.create(); ExecutorService exec = Executors.newFixedThreadPool(fixNum); for ( int i = 0 ; i < fixNum ; i ++ ){//例如多线程模拟多个进程 exec.submit(new TestLock("client-"+i,redissonClient,latch)); } exec.shutdown(); latch.await(); System.out.println("所有任务执行完成"); } } package com.inspur.inspurTest.test.redis; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * author yulinshan * time 2019/5/23 **/ public class TestLock implements Runnable { private String name; RedissonClient redisson; private CountDownLatch latch; public String getName() { return name; } public void setName(String name) { this.name = name; } public TestLock(String name , RedissonClient redisson, CountDownLatch latch){ this.name = name; this.redisson = redisson; this.latch = latch; } @Override public void run() { RLock lock = redisson.getLock("TestLock"); try { System.out.println("-----------"+this.name+"----------等待获取锁--------"); if (lock.tryLock(300,30, TimeUnit.MILLISECONDS)) { try { System.out.println("-----------" + this.name + "----------获得锁-------开始处理------"); Thread.sleep(2 * 100); System.out.println("-----------" + this.name + "----------使用完锁--------"); latch.countDown(); }finally { lock.unlock(); System.out.println("-----------" + this.name + "----------释放锁-------"); } } } catch (InterruptedException e) { e.printStackTrace(); } } }

    用到的包为:

    compile group: 'org.redisson', name: 'redisson', version: '2.13.2'。
    最新回复(0)