synchronized 关键字

1. synchronized 关键字的作用

synchronized 关键字解决的是多个线程之间访问资源的同步性,用于保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。

2. 作用范围

  • 修饰代码块:大括号括起来的代码,作用于调用的对象。
  • 修饰方法:整个方法,作用于调用的对象。
  • 修饰静态方法:整个静态方法,作用于所有对象。
  • 修饰类:括号括起来的部分,作用于所有对象。

其中前两种使用的锁称为对象锁,后两种称为类锁。

3. synchronized 关键字的性质

  • 可重入:避免死锁、提升封装性
  • 不可中断:一旦这个锁已经被别人获得了,如果我还想获得,就只能选择等待或者阻塞,知道别的线程释放这个锁。如果别人永远不释放这个锁,那么我只能永远等待下去。

4. synchronized 关键字的缺陷

  • 效率低

    只能等执行完锁定代码块或者遇到异常才能退出
    试图获得锁时不能设定超时时间
    不能中断一个正在试图获得锁的线程

  • 不够灵活

    加锁和释放锁的时机单一
    每个锁仅有单一的条件(某个对象)

  • 无法知道是否成功获取到锁

5. 原子性-对比

  • synchronize:不可中断,适合竞争不激烈的场景,可读性好
  • lock:可中断,多样化同步,竞争激烈时能维持常态
  • Atomic:竞争激烈时能维持常态,比lock性能好,只能同步一个值

文章来源:synchronized 关键字

个人微信:CaiBaoDeCai

微信公众号名称:Java知者

微信公众号 ID: JavaZhiZhe

谢谢关注!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值