synchronized 关键字

关于锁和同步

类锁 vs 对象锁

同步是对同一把锁而言的,同步这个概念是在多个线程争夺同一把锁的时候才能实现的,如果多个线程争夺不同的锁,那多个线程是不能同步的

锁和 synchronized 的关系

锁是 Java 中用来实现同步的工具

而之所以能对方法或者代码块实现同步的原因就是:只有拿到锁的线程才能执行 synchronized 修饰的方法或代码块,且其他线程获得锁的唯一方法是等目前拿到锁的线程执行完方法将锁释放,如果 synchronized 修饰的代码块或方法没执行完是不会释放这把锁的,这就保证了拿到锁的线程一定可以一次性把它调用的方法或代码块执行完

synchronized 修饰的类型

若 synchronized 修饰「静态方法」或者修饰「类的代码块」,则为类锁 🔒

若 synchronized 修饰「普通方法」或者修饰「当前对象的代码块」,则为对象锁 🔒

修饰方法

注意:

修饰代码块