引入jar包
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.1</version>
</dependency>
实现普通锁
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
public class ThreadDemo1 implements Runnable{
@Override
public void run() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("mol");
RedissonClient redissonClient = Redisson.create(config);
RLock lock1 = redissonClient.getLock("lock");
lock1.lock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadDemo1 获取锁");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock1.unlock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadDemo1 释放锁");
}
}
}
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
public class ThreadDemo2 implements Runnable{
@Override
public void run() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("mol");
RedissonClient redissonClient = Redisson.create(config);
RLock lock1 = redissonClient.getLock("lock");
lock1.lock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadDemo2 获取锁");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock1.unlock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadDemo2 释放锁");
}
}
}
实现读写锁
import org.redisson.Redisson;
import org.redisson.api.RReadWriteLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
public class ThreadReadWriteDemo1 implements Runnable{
@Override
public void run() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("mol");
RedissonClient redissonClient = Redisson.create(config);
RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("readWrite");
readWriteLock.readLock().lock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo1 获取读锁");
try {
Thread.sleep(5 * 1000);
readWriteLock.readLock().unlock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo1 释放读锁");
readWriteLock.writeLock().lock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo1 获取写锁");
Thread.sleep(5 * 1000);
readWriteLock.writeLock().unlock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo1 释放写锁");
} catch (InterruptedException e) {
}
}
}
import org.redisson.Redisson;
import org.redisson.api.RReadWriteLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
public class ThreadReadWriteDemo2 implements Runnable{
@Override
public void run() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("mol");
RedissonClient redissonClient = Redisson.create(config);
RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("readWrite");
readWriteLock.readLock().lock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo2 获取读锁");
try {
Thread.sleep(5 * 1000);
readWriteLock.readLock().unlock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo2 释放读锁");
readWriteLock.writeLock().lock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo2 获取写锁");
Thread.sleep(5 * 1000);
readWriteLock.writeLock().unlock();
System.out.println(DateUtil.format(System.currentTimeMillis())+" ThreadReadWriteDemo2 释放写锁");
} catch (InterruptedException e) {
}
}
}
格式化时间工具类
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
public static String format(long time) {
return new SimpleDateFormat("HH:mm:ss").format(new Date(time));
}
}
main函数
public class Demo {
public static void main(String[] args) throws InterruptedException {
new Thread(new ThreadDemo1()).start();
new Thread(new ThreadDemo2()).start();
Thread.sleep(30 * 1000);
System.out.println("测试读写锁");
new Thread(new ThreadReadWriteDemo1()).start();
new Thread(new ThreadReadWriteDemo2()).start();
}
}
结果
17:13:45 ThreadDemo2 获取锁
17:13:55 ThreadDemo2 释放锁
17:13:55 ThreadDemo1 获取锁
17:14:05 ThreadDemo1 释放锁
测试读写锁
17:14:14 ThreadReadWriteDemo2 获取读锁
17:14:14 ThreadReadWriteDemo1 获取读锁
17:14:19 ThreadReadWriteDemo2 释放读锁
17:14:19 ThreadReadWriteDemo2 获取写锁
17:14:19 ThreadReadWriteDemo1 释放读锁
17:14:24 ThreadReadWriteDemo2 释放写锁
17:14:24 ThreadReadWriteDemo1 获取写锁
17:14:29 ThreadReadWriteDemo1 释放写锁