synchronized关键字解析

一、修饰方法
   1.修饰普通方法:对调用此方法的对象加锁
   2.修饰static方法:对调用此方法的类的所有对象加锁
   3.不能修饰构造方法,但是可以在构造方法内部修饰代码块


二、修饰代码块
   1.synchronized(this):相当于修饰普通方法

   2.synchronized(A.class):相当于修饰static方法     

   3.synchronized(实例变量):给调用此方法的对象的实例变量加锁
    例子:
    public class A{
      private byte[] s=new byte[0];
      public void doSth(){
           synchronized(s){
             ...
           }
      }
    }
     
   4.synchronized(类变量):给调用此方法的类的所有对象的类变量加锁
     例子:
    public class A{
      private static byte[] s=new byte[0];
      public void doSth(){
           synchronized(s){
             ...
           }
      }
    }

   5.synchronized(对象):明确给某个指定对象加锁
     例子:
    public class A{
      public void doSth(Object obj){
           synchronized(obj){
             ...
           }
      }
    }

   6.synchronized代码块不能修饰基本数据类型的变量

   7.synchronized代码块修饰基本数据类型的包装类时,如果在同步块中对同步变量进行运算会导致同步失效,
     因为内部包含了封箱拆箱动作,包装类引用指向了新的对象

   8.synchronized代码块修饰String变量时,如果在同步块中对String变量重新赋值会导致同步失效,
     因为创建String的实例并不需要new,String变量在重新赋值时引用指向了新的对象


三、synchronized不能被继承




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值