synchronized关键字

一、概念

synchronized是Java的关键字,它提供一种排他机制,使得在同一时间内只能有一个线程去操作去操作synchornized封装的代码块或者方法。

二、用法:

同步方法锁定的是当前对象。当多线程通过同一个对象引用多次调用当前同步方法时,需同步执行。也就是说当一个线程访问同步方法时,其他线程访问这个方法将会被阻塞(等待锁)。

1.同步方法

同步成员方法

 public synchornized void func(){}

同步静态方法

 public synchornized static void func(){} 

2.同步代码块

  • 同步代码块在执行时,是锁定 object对象。当多个线程调用同一个方法时,锁定对象不变的情况下,需同步执行。
  • 同步代码块的同步粒度更加细致,可以定位到具体的同步位置,而不是简单的将方法整体实现同步逻辑。在效率上,比同步方法更高
private final Object lock = new Object();                
public void func(){                                      
    synchornized(lock){                                  
        ...                                              
    }                                                    
}    

三、使用场景

  1. 两个线程同时访问同一个对象的同步方法 安全
  2. 两个线程同时访问两个对象的同步方法 (不安全)
  3. 两个线程**同时访问(一个或两个)**对象的静态同步方法 (安全)
  4. 两个线程**分别同时访问(一个或两个)**对象的同步方法和非同步方法。(不安全)
  5. 两个线程访问同一个对象中的同步方法,同步方法又调用另外一个非同步方法 不安全
  6. 两个线程同时访问同一个对象的不同的同步方法 安全
  7. 两个线程同时访问静态synchronized和非静态synchornized方法 不安全
  8. 同步方法抛出异常,JVM会自动释放锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值