karigan 2015-10-20 14:19 采纳率: 0%
浏览 3211

Java静态方法的同步锁

Java静态方法的同步锁必须是字节码class吗?可以是static对象吗?

  • 写回答

3条回答 默认 最新

  • 毕小宝 博客专家认证 2015-10-20 14:54
    关注

    如果你是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) {
    
            }
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题