不要以字符串常量作为锁定对象

												## 不要以字符串常量作为锁定对象
package cn.qqjx.thread.c_018;

/*
 * 不要以字符串常量作为锁定对象
 * 在下面的例子中,m1和m2其实锁定的是同一个对象
 * 在这之前情况还会发生比较诡异的现象,比如你用到了一个类库,在该类库中代码锁定了字符串"hello"
 * 但是你读不到源码,所以你在自己的代码中也锁定了"hello",这个时候就有可能发生非常诡异的死锁阻塞
 * 因为你的程序和你读到的类库不经意间使用了同一把锁
 *  @Auther  wangpeng
 * @Date 2021/1/8
 */

public class T {
    
    

    String s1 = "Hello";
    String s2 = "Hello";

    void m1(){
    
    
        synchronized (s1){
    
    

        }
    }

    void m2(){
    
    
        synchronized (s2){
    
    

        }
    }

}

猜你喜欢

转载自blog.csdn.net/m0_52936310/article/details/112387188