假设有这样的场景,我们用多线程给redis里面一个变量,比如money=1000做减法,每次将变量-100,这样,10次操作之后,我们期望的是0,在实际中,我们通过编码来看看这个结果:
RedisUtil.java 用jedis线程池来操作redis
package com.xxx.redis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisUtil {
public static final JedisPool pool;
static{
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(200);
config.setMaxWaitMillis(1000 * 100);
config.setTestOnBorrow(false);
pool = new JedisPool(config, "127.0.0.1", 6379);
}
}
DistributedLock.java
package com.xxx.redis;
import java.util.concurrent.TimeUnit;
import redis.clients.jedis.Jedis;
public class DistributedLock {
public static Runnable notLock() throws InterruptedException{
return ()->{
try (Jedis jedis = RedisUtil.pool.getResource