//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'。