Java静态方法的同步锁必须是字节码class吗?可以是static对象吗?
3条回答 默认 最新
关注 如果你是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) { } } }
解决 无用评论 打赏 举报