阻塞式等待 ( 续长30s ) 1) 锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s 2) 加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后自动删除
@Controller public class IndexController { @Autowired RedissonClient redisson; @ResponseBody @GetMapping("/hello") public String hello() { // 1、获得一把锁,只要锁的名字一样,就是同一把锁 RLock lock = redisson.getLock("my-lock"); // 2、加锁 (重要1) lock.lock(); // 阻塞式等待 // 1) 锁的自动续期,如果业务超长,运行期间自动给锁续上新的30s // 2) 加锁的业务只要运行完成,就不会给当前锁续期,即使不手动解锁,锁默认在30s以后自动删除 try { System.out.println("加锁成功,z之行业务。。。"+Thread.currentThread().getId()); Thread.sleep(15000); } catch (Exception e) { e.printStackTrace(); } finally { // 3、解锁 (重要2) lock.unlock(); // 问题:将解锁代码没有之行,redisson 会不会出现死锁 System.out.println("释放锁。。。"+Thread.currentThread().getId()); } return "hello"; } }开启2个浏览器,同时请求微服务