创建线程池,准备好库存信息
public class Applicaiton {
public static ThreadPoolExecutor pool = new ThreadPoolExecutor(
10,
100,
10,
TimeUnit.SECONDS,new LinkedBlockingDeque<Runnable>()
);
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost", 6379);
//jedis.auth()
jedis.select(1); // 选择库1
jedis.set("kill_num","50");
jedis.del("kill_list");
jedis.close();
for(int i=0; i < 1000; i++) {
pool.execute(new KillTask()); // 创建秒杀线程
}
}
}
创建线程任务类,实现秒杀商品任务线程
public class KillTask implements Runnable {
@Override
public void run() {
Jedis jedis = new Jedis("localhost", 6379);
jedis.select(1); // 选择库1
jedis.watch("kill_num","kill_list");
int num = Integer.parseInt(jedis.get("kill_num"));
if(num > 0) {
Transaction transaction = jedis.multi(); // 开启事务
transaction.decr("kill_num");
transaction.rpush("kill_list","9483");
transaction.exec(); // 关闭事务
} else {
Applicaiton.pool.shutdown();
}
jedis.close();
}
}
原文:https://www.cnblogs.com/lixyuan/p/13579918.html