synchronized(.class) synchronized(Object ) synchronized(this) 区别

1. synchronized(.class)只要是访问这个类的方法,就会同步,不管用这个类创建了几个对象!一般单列模式常用

例如:

private static volatile SingIn instance=null;
 private SingIn (){
 
 }
 public static  SingIn getInstance(){
    if(instance==null){
      synchronized(SingIn .class){
      if(instance==null){
        instance=new SingIn ();
       }
      }
     }
    return instance;
  }

2.  synchronized(Object x),通过对象同步,注意必须是同一个对象

一般在多线程中访问同一个对象时,在run方法中用到

例如:

@Override
 public void run(){
     synchronizedObject x){
         x .setDeviceName(“a”);
    }
}

3 .synchronized(this) 指的是对象本身同步,一般在定义对象的方法时可以用,当只有访问同一对象,才会同步,和synchronized(Object x)功能类似。

例如:

    1. public class ObjectService {  
    2.     public void serviceMethodA(){  
    3.         try {  
    4.             synchronized (this) {  
    5.                 System.out.println("A begin time="+System.currentTimeMillis());  
    6.                 Thread.sleep(2000);  
    7.                 System.out.println("A end   time="+System.currentTimeMillis());  
    8.             }  
    9.         } catch (InterruptedException e) {  
    10.             e.printStackTrace();  
    11.         }  
    12.     }  
    13.     public void serviceMethodB(){  
    14.         synchronized (this) {  
    15.             System.out.println("B begin time="+System.currentTimeMillis());  
    16.             System.out.println("B end   time="+System.currentTimeMillis());  
    17.         }  
    18.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值