同步函数用的是那一个锁呢?
函数需要被对象调用。那么函数都有一个所属对象引用,就是this.所以同步函数使用的锁就是this.
如果同步函数被静态修饰后,使用的锁是什么呢?通过验证,发现不在是this.因为静态方法中也不可以定义this。静态进内存时,内存中没有本来对象,但是一定有该类对应的字节码文件对象。类名.class 该对象的类型是Class
静态的同步方法,使用的锁是该方法所在类的字节码文件对象。类名.class
//懒汉式 延迟加载 如果多线程会出现安全问题 需要双重判断, 锁里面的对象是该类所属的字节码文件
class Single{
private static Single s = null;
private Single(){}
public static Single getInstance(){
if(s==null){
synchronized(Single.class){
if(s==null)
s = new Single();
}
}
return s;
}
}
class SingleDemo{
public static void main(String[] args){