博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不要使用字符串常量作为对象锁去同步代码
阅读量:7304 次
发布时间:2019-06-30

本文共 491 字,大约阅读时间需要 1 分钟。

hot3.png

使用字符串常量作为锁去同步代码是非常危险的事情。请看下面的一段代码:

 Foo         String LOCK = ;     someMethod()       (LOCK)       ...

为什么这样会有危险呢?私有的字符串常量是真正的私有吗?答案是否定的。

  重新阅读一下Java语言规范2.0的第3.10.5节,“不同包不同类中的值相同的字符串常量引用的是同一个字符串对象。”
  上面的那段代码意味着外部任何的
Class都可以包含指向同一个字符串对象的字符串常量,因此就有可能出现死锁的情况!如果你的字符串对象调用了intern()方法也有可能会出现这种情况!
  这种情况在
Jetty类库中真正的出现过,两个部分使用了相同的字符串常量去同步临界区代码,那两个代码片段产生了死锁现象,并且出现了莫名其妙的栈的跟踪信息。(
  如果你确实需要一个对象锁的话,最好使用
new Object()来创建。也可以考虑使用java.util.concurrent包中的工具。

英文原文:

转载于:https://my.oschina.net/sniperLi/blog/599983

你可能感兴趣的文章
APP --UI测试
查看>>
No space left on device: Couldn't create accept lock
查看>>
android ANR检测 BlockCanary
查看>>
多研究些架构,少谈些框架( 2 ):微服务和充血模型
查看>>
PHP isset() 函数
查看>>
Wordpress主题站
查看>>
PDO 查询mysql返回字段整型变为String型解决方法
查看>>
让你的网站用上https
查看>>
gitlab 同步小脚本
查看>>
centos7安装saltstack
查看>>
基于Elasticsearch开发时的注意事项备忘
查看>>
适配器模式 adapter 结构型 设计模式(九)
查看>>
Zepto 使用中的一些注意点(转)
查看>>
Java算法练习——字符串转换整数 (atoi)
查看>>
sql对于between和时间
查看>>
分布式锁的实现
查看>>
移动平台对 META 标签的定义
查看>>
Linux之od命令详解
查看>>
day1
查看>>
详解jar命令打包生成双击即可运行的Java程序
查看>>