Java并发编程--不要使用字符串常量作为synchronized锁对象
生活随笔
收集整理的這篇文章主要介紹了
Java并发编程--不要使用字符串常量作为synchronized锁对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
* 不要以字符串常量作為鎖定對象
* 在下面的例子中,m1和m2其實鎖定的是同一個對象
* 這種情況下會發生比較詭異的現象,比如你用到了一個類庫,在該類庫中代碼鎖定了字符串“hello”
* 但是你讀不到源碼,所以你也在代碼中鎖定了“hello”,這時候就有可能發生特別詭異的死鎖阻塞
* 因為你的程序和類庫不經意間使用到了同一把鎖
jetty曾遇到過類似的鎖問題。
public class StringNotUse {/*** 不要以字符串常量作為鎖定對象* 在下面的例子中,m1和m2其實鎖定的是同一個對象* 這種情況下會發生比較詭異的現象,比如你用到了一個類庫,在該類庫中代碼鎖定了字符串“hello”* 但是你讀不到源碼,所以你也在代碼中鎖定了“hello”,這時候就有可能發生特別詭異的死鎖阻塞* 因為你的程序和類庫不經意間使用到了同一把鎖*/String s1 = "hello";String s2 = "hello";void m1(){synchronized (s1){}}void m2(){synchronized (s2){}}}?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java并发编程--不要使用字符串常量作为synchronized锁对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA volatile关键字正确使
- 下一篇: Java设计模式--使用内部类实现线程安