java synchronized 对象锁详解-java-ICode联盟

原创  java synchronized 对象锁详解

分类:java    107人阅读    IT小君  2023-04-18 22:42

 在 Java 中,synchronized 是用于实现线程同步的关键字,它可以在任意对象上加锁。当一个线程访问 synchronized 方法或 synchronized 代码块时,它就会获得该对象的锁,其他线程必须等待该线程释放锁后才能访问该对象。

synchronized 对象锁可以分为两种:

1. 对象锁(非静态方法锁)

当一个线程调用一个对象的 synchronized 方法时,它就会获得该对象的锁,其他线程必须等待该线程释放锁后才能访问该对象。如果一个对象有多个 synchronized 方法,那么当一个线程获得该对象的锁后,其他线程也不能调用该对象的其他 synchronized 方法。

例如:

public synchronized void method1(){
// ...
}

public synchronized void method2(){
// ...
}



在上面的例子中,当一个线程调用 method1() 方法时,它就会获得该对象的锁,其他线程不能调用 method1() 或 method2() 方法。同理,当一个线程调用 method2() 方法时,其他线程也不能调用 method1() 或 method2() 方法。

2. 类锁(静态方法锁)

当一个线程调用一个对象的 synchronized 静态方法时,它就会获得该对象所属的类的锁,其他线程必须等待该线程释放锁后才能访问该对象所属的类。

例如:

public static synchronized void method1(){
// ...
}

public static synchronized void method2(){
// ...
}



在上面的例子中,当一个线程调用 method1() 方法时,它就会获得该对象所属的类的锁,其他线程不能调用 method1() 或 method2() 方法。同理,当一个线程调用 method2() 方法时,其他线程也不能调用 method1() 或 method2() 方法。

需要注意的是,synchronized 对象锁只能控制同一个对象的同步访问,对于不同对象之间的访问,需要使用其他的同步机制。

点击广告,支持我们为你提供更好的服务

css精美蝴蝶动画特效

3dmax弹跳鼠标跟随动画特效

有趣的css图片遮罩层滤镜特效

炫酷WebGL流体图片滑动切换效果

css照明喷泉灯光动画特效

HTML5浪漫风格婚礼婚纱婚庆网站模板

教育辅导培训机构HTML5网站模板

打造健康生活方式宣传网站模板

html5 canvas文字放射发光动画特效

CSS3 SVG叶子虚线响应式布局代码

商务代理服务商公司网站模板

4款不同岗位个人求职简历网页模板

创意设计机构HTML5网站模板

极简品牌设计工作室HTML5网站模板

canvas卡通液体马赛克图像特效

html5鼠标经过星星连成一条线特效

HTML5保健品营养品引导页模板

互联网设计师个人简历网页模板

高级岗位个人求职面试网页模板

时尚css导航菜单栏动画特效

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»