Redis做锁的优势,setnx,天生单线程,单进程
首先打开redis服务,redis-server.exe,然后打开桌面客户端
emloyee(加锁)
package com.pp.test01;
public class Employee {
int employer = 29;
public void add() {
if(MyRedLock.getLock()) {
if(employer<30) {
System.out.println(Thread.currentThread().getName()+"增加一人");
employer++;
}else {
System.out.println(Thread.currentThread().getName()+"名额已满");
}
MyRedLock.unLock();
}
}
}
MyRedLock(Redis做锁)
package com.pp.test01;
import redis.clients.jedis.Jedis;
public class MyRedLock {
public static boolean getLock() {
Jedis j = new Jedis("192.168.1.143",6379);
while(true) {
long c = j.setnx("one", "1");
if(c>0) {
return true;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void unLock() {
Jedis j = new Jedis("192.168.1.143",6379);
j.del("one");
}
}
main
package com.pp.test01;
public class MainClass {
public static void main(String[] args) {
Employee e = new Employee();
Thread t1 = new Thread(()->{
e.add();
});
Thread t2 = new Thread(()->{
e.add();
});
t1.start();
t2.start();
}
}