synchronized 关键字

1. synchronized 关键字的作用

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

2. 作用范围

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

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

3. synchronized 关键字的性质

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

4. synchronized 关键字的缺陷

  • 效率低

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

  • 不够灵活

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

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

5. 原子性-对比

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

文章来源:synchronized 关键字

个人微信:CaiBaoDeCai

微信公众号名称:Java知者

微信公众号 ID: JavaZhiZhe

谢谢关注!

posted @ 2023-06-03 11:44  Java知者  阅读(57)  评论(0编辑  收藏  举报