synchronized关键字最主要的三种使用方式

Posted 四猿外

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了synchronized关键字最主要的三种使用方式相关的知识,希望对你有一定的参考价值。

修饰实例方法: 作用于当前对象实例加锁,进入同步代码前要获得当前对象实例的锁

修饰静态方法: 也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员( static 表明这是该类的一个静态资源,不管new了多少个对象,只有一份)。所以如果一个线程A调用一个实例对象的非静态 synchronized 方法,而线程B需要调用这个实例对象所属类的静态 synchronized 方法,是允许的,不会发生互斥现象,因为访问静态 synchronized 方法占用的锁是当前类的锁,而访问非静态 synchronized 方法占用的锁是当前实例对象锁。

修饰代码块: 指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。

总结: synchronized 关键字加到 static 静态方法和 synchronized(class)代码块上都是是给 Class 类上锁。synchronized 关键字加到实例方法上是给对象实例上锁。尽量不要使用 synchronized(String a) 因为JVM中,字符串常量池具有缓存功能!

以上是关于synchronized关键字最主要的三种使用方式的主要内容,如果未能解决你的问题,请参考以下文章

Java创建线程的三种方式,同步锁的实现synchronized,lock

高并发学习 —— JUC

Java 并发学习总结

spring管理bean的三种创建方式

基于JavaScript 声明全局变量的三种方式详解

基于JavaScript 声明全局变量的三种方式