2019独角兽企业重金招聘Python工程师标准>>>

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

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

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

英文原文:http://www.javalobby.org/java/forums/t96352.html

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

不要使用字符串常量作为对象锁去同步代码相关推荐

  1. 6※、线程同步、同步锁、同步代码块的使用、同步锁释放的时机、ReentrantLock可重入锁、公平锁与非公平锁的区别、什么是死锁、线程间的通信(生产者和消费者模式)

    线程锁 1.※线程的同步:(要确保对象锁是一致的) 1.未使用同步锁的抢票 2.使用了同步锁的抢票 3.线程-同步代码块的使用 4.同步方法和代码块的区别 5.同步锁释放的时机 练习:多线程生产手机 ...

  2. Java并发编程--不要使用字符串常量作为synchronized锁对象

    * 不要以字符串常量作为锁定对象 * 在下面的例子中,m1和m2其实锁定的是同一个对象 * 这种情况下会发生比较诡异的现象,比如你用到了一个类库,在该类库中代码锁定了字符串"hello&qu ...

  3. synchronized对象锁的同步和异步问题

    先上代码: public class MyObject {public synchronized void method1(){try {System.out.println(Thread.curre ...

  4. [java多线程] - 锁机制同步代码块信号量

    在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...

  5. js中如何把字符串转化为对象、数组示例代码

    很明显是一个对象,但如何把文本转为对象呢.使用eval();注意一定要加括号,否则会转换失败  把文本转化为对象 var test='{ colkey: "col", colsin ...

  6. Java 对象锁和类锁全面解析

    2019独角兽企业重金招聘Python工程师标准>>> 最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念. ...

  7. java同步锁synchronized_Java对象锁和类锁全面解析(多线程synchronized关键字)

    本文主要是将synchronized关键字用法作为例子来去解释Java中的对象锁和类锁.特别的是希望能帮大家理清一些概念. 一.synchronized关键字 synchronized关键字有如下两种 ...

  8. Python进阶:如何将字符串常量转化为变量?

    2019独角兽企业重金招聘Python工程师标准>>> 前几天,我们Python猫交流学习群 里的 M 同学提了个问题.这个问题挺有意思,经初次讨论,我们认为它无解. 然而,我认为它 ...

  9. java中存在对多个对象加锁的情况_Java对象锁和类锁全面解析(多线程synchronized关键字)...

    最近工作有用到一些多线程的东西,之前吧,有用到synchronized同步块,不过是别人怎么用就跟着用,并没有搞清楚锁的概念.最近也是遇到一些问题,不搞清楚锁的概念,很容易碰壁,甚至有些时候自己连用没 ...

最新文章

  1. android获取手机通讯录
  2. arcgis python脚本实现从界面选择输入输出_arcgis python脚本实现从界面选择输入输出_ArcGIS Python编程案例(2)-使用ArcPy编写脚本......
  3. Redhat Linux 7.2 打开或关闭防火墙
  4. RocketMQ消费幂等性处理
  5. python 复现AC自动机
  6. C# 程序异常关闭时的捕获
  7. 条款28:避免返回handles指向对象内部的成分(Avoid returning handles to objects internals)...
  8. 多线程编程——pthread
  9. Cuba 设置debug模式
  10. 同态加密之Paillier算法
  11. excel不显示0_Excel教程:数值为0不显示的三种解决方法
  12. html聊天室ui,震惊!这个H5居然是在线聊天室!(内附完整教程)
  13. [TJOI2013]松鼠聚会【切比雪夫距离转换曼哈顿距离】
  14. 如何优雅地使用Sublime
  15. 重温经典(三)-百年思索
  16. Gigaphoton宣布产品列表刷新计划
  17. unix操作系统(360搜索百科)介绍unix系统产生的由来和发展是重点,而百度百科中没有仔细介绍这方面
  18. UNIX文件操作函数open、create、close、lseek简介
  19. PCB Layout设计规范-通用篇
  20. 【机器学习】通过ID3,C4.5,CART算法构建决策树

热门文章

  1. 中文分词工具的初步使用图解
  2. 2019年5月21号总结
  3. MIMO雷达比幅单脉冲测角精度分析(系统工程与电子技术)
  4. 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)...
  5. 2_常用样式-border
  6. 教你10招最有效防电脑辐射方法
  7. 手机QQ浏览器“有码女神”惊现!意在推广二维码
  8. 面向接口编程详解(三)——模式研究
  9. 66319d电源使用说明书_海尔洗衣机怎么用 海尔洗衣机使用说明【详细介绍】
  10. java 多线程共享数据_Java多线程学习:多个线程间共享数据