Java 有类似于 Redis 锁的,只在本应用的锁吗?

2022 年 6 月 7 日
 displayabc

想要的效果:lock(name, 30s) name 是变量,后边是自动失效时间 不知道有没有类似的成熟库

5416 次点击
所在节点    Java
28 条回复
potatowish
2022 年 6 月 8 日
@ZeawinL 时间参数是最大等待锁的时间,不是最大持有时间啊
RedBeanIce
2022 年 6 月 8 日
2l 是对的。
displayabc
2022 年 6 月 8 日
@ZeawinL 锁什么时候释放,Map 什么时候清除这个 key
姑且按
lockMap.remove("key-name");
lock.unlock();
这种来处理
当第一个线程 remove 操作之前,有第二个线程来获取锁,获取的还是老的 ReentrantLock ,在 tryLock 阶段,第一个线程 remove 操作了,第三个线程来获取锁,肯定是新的 ReentrantLock
ZeawinL
2022 年 6 月 8 日
@potatowish 理解错了,感谢指正
mrsatangel
2022 年 6 月 8 日
potatowish
2022 年 6 月 8 日
用字符串变量作为锁的名称没有太难吧,用 ConcurrentHashMap 映射一下,或者直接用 intern ,获取常量池引用。

我觉得重点应该是如何实现锁的过期机制,有没有必要可先放一边。
NULL2020
2022 年 7 月 21 日
所以,OP 最后使用了什么方法?
displayabc
2022 年 7 月 21 日
@NULL2020
synchronized (name.tostring().intern()) {
..
}

一是因为我的业务可以确定不会有太多字符串,二是可能还没等到常量池太大,就又重新部署一次了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/857973

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX