Synchronized

线程安全原因:

  • 存在共享数据(临界资源)
  • 存在多个线程共同操作共享数据

    所以:
    保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行(就是互斥锁)

synchronized可以保证

  1. 在同一个时刻,只有一个线程可以执行某个方法或者某个代码块
  2. 一个线程的变化 (主要是共享数据的变化) 被其他线程所看到


synchronized的三种应用方式

修饰 作用对象
实例方法 给this加锁
静态方法 给类加锁
代码块 指定对象加锁

当一个线程正在访问一个对象的 synchronized 实例方法,那么其他线程不能访问该对象的其他 synchronized 方法,毕竟一个对象只有一把锁,当一个线程获取了该对象的锁之后,其他线程无法获取该对象的锁,所以无法访问该对象的其他synchronized实例方法,但是其他线程还是可以访问该实例对象的其他非synchronized方法,

synchronized作用于实例方法

synchronized作用于静态方法

synchronized同步代码块

synchronized底层语义原理

理解Java对象头与Monitor

synchronized代码块底层原理

synchronized方法底层原理

Java虚拟机对synchronized的优化

偏向锁

轻量级锁

自旋锁

锁消除

关于synchronized 可能需要了解的关键点

synchronized的可重入性

线程中断与synchronized

线程中断

中断与synchronized

等待唤醒机制与synchronized