分布式锁要满足最基础的两点,数据共享,锁释放通知不借助中间服务,个人理解是服务调用中不依赖其他需要网络通信的服务,那么可以想到的有直接内存。ehcache可以利用直接内存做到跨进程的数据共享。这就解决了数据共享问题,另外ehcache也具备让key失效的策略,可以避免死锁问题。锁释放通知个人理解就是在锁竞争失败后,线程进入阻塞状态,由获取锁成功的线程通过广播消息进行唤醒

    独占锁:
    采用与redis相同的思路,putIfAbsent类似setnx指令,若返回为null则说明加锁成功,反之调用wait进入阻塞,由成功获取的线程通过udp广播消息进行唤醒,继续锁的竞争

    顺序锁:
    不设置过期时间,但需要考虑异常状态锁的释放,往同一个key中进行尾插法。然后判断当前key是否startWith当前线程持有的唯一ID,如果是,则竞争成功,反之阻塞等待,参考ZK的顺序锁模式