使用synchronized,如何判断是不是同一个锁。

先来看一下 == 和 equals 的区别:

java中默认的equals方法实现如下:

public boolean equals(Object obj) {
    return (this == obj);
}

值类型,用==判断相等性。对象引用的话,==判断引用指向的对象是否是同一个。==是判断两个变量或实例是不是指向同一个内存空间。 equals是判断两个变量或实例所指向的内存空间的值是不是相同 。

equals是Object的成员函数,有些类会覆盖这个方法,用于判断对象的等价性。例如String类。

		String s1 = "abc"+"def";
		String s2 = new String(s1);
		System.out.println("s1==s2? " + (s1==s2));
		System.out.println("s1.equals(s2)? "+s1.equals(s2));
		
		String s3 = "abc";
		String s4 = "abc";


		System.out.println("s3==s4? "+(s3==s4));
		System.out.println("s3.equals(s4)? "+s3.equals(s4));

输出:

s1==s2? false
s1.equals(s2)? true
s3==s4? true
s3.equals(s4)? true
所以,synchronized是使用== 而不是 equals 来比较锁对象是否为同一个锁。

synchronized中锁对象是使用的equals比较还是==

synchronized中锁对象是使用的equals比较还是==

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页