Java静态方法的同步锁必须是字节码class吗?可以是static对象吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果你是synchronized加在静态方法上,那么锁就是当前类的class对象,但是如果是在静态方法内部的静态语句块,那么锁对象就可以是任意的可引用的对象。
如果是加在非静态方法上,那么锁对象就是当前this对象。实例代码:
public class CTest {
private static String dataStatic = new String("lock1");
private String dataNonStatic = new String("lock2");
//静态方法上的同步,那么锁就是默认的当前CTest.class对象
public static synchronized void testStatic(){
//方法内部的代码块的锁可以是任意的
synchronized (dataStatic) {
//
}
synchronized(CTest.class){
}
}
//非静态方法上同步,锁为this
public synchronized void testNonStatic(){
//代码块内部,锁可以是任意的
synchronized (this) {
}
synchronized (dataNonStatic) {
}
synchronized (CTest.class) {
}
}
}