免费注册的网站能备案吗,国外最开放的浏览器,怎么推广app,中关村在线手机参数对比synchronized 是什么#xff1f;
synchronized 是 Java 中的一个关键字#xff0c;翻译成中文就是 同步 的意思#xff0c;主要解决的是多个线程之间访问资源的同步性#xff0c;可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 如何使用 synchronized?…synchronized 是什么
synchronized 是 Java 中的一个关键字翻译成中文就是 同步 的意思主要解决的是多个线程之间访问资源的同步性可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。 如何使用 synchronized?
synchronized 关键字的使用方式主要有以下三种
修饰实例方法修饰静态方法修饰代码块
1. 修饰实例方法锁当前对象实例
给当前对象实例加锁进入同步代码前要获得 当前对象实例的锁。
synchronized void method(){
}
2. 修饰静态方法锁当前类
给当前类加锁会作用于类的所有对象实例进入同步代码前要获得 当前 class 的锁。
这是因为静态成员不属于任何一个实例对象归整个类所有不依赖于类的特定实例被类的所有实例共享。
synchronized static void method(){
}
静态 synchronized 方法和非静态 synchronized 方法之间的调用互斥吗
不互斥。如果线程 A 调用一个 实例对象的非静态 synchronized 方法而线程 B 需要调用这个实例对象所属类的静态 synchronized 方法是允许的不会发生互斥现象因为访问静态 synchronized 方法占用的锁是当前类的锁而访问非静态 synchronized 方法占用的锁是当前实例对象锁。
3. 修饰代码块锁指定对象/类
对括号里指定的对象/类加锁
synchronized(object) 表示进入同步代码库前要获得 给定对象的锁。synchronized(类.class) 表示进入同步代码前要获得 给定 Class 的锁
synchronized (this){
}
总结
synchronized 关键字加到 static 静态方法和 synchronized(class) 代码快上都是给 class 类加锁synchronized 关键字加到实例方法上是给对象实例加锁尽量不要使用 synchronized(String a) 因为 JVM中字符串常量池具有缓冲功能、 构造方法不能使用 synchronized 关键字修饰。 构造方法本身就属于线程安全的不存在同步的构造方法一说 synchronized 和 volatile 有什么区别
synchronized 关键字和 volatile 关键字是两个互补的存在而不是对立的存在。
volatile 关键字是线程同步的轻量级实现所以 volatile 性能比 synchronized 关键字要好。但是 volatile 关键字只能用于变量而 synchronized 关键字可以修饰方法以及代码块volatile 关键字能保证数据的可见性但不能保证数据的原子性。synchronized 关键字两者都能保证。volatile 关键字主要用于解决变量在多个线程之间的可见性而 synchronized 关键字解决的是多个线程之间访问资源的同步性。