原创 

java synchronized 对象锁详解

分类:java    269人阅读    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 对象锁只能控制同一个对象的同步访问,对于不同对象之间的访问,需要使用其他的同步机制。

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

jQuery右端悬浮带返回顶部特效

html5图标下拉搜索框自动匹配代码

有机水果蔬菜HTML5网站模板

HTML5数字产品服务公司网站模板

html5 svg夜空中星星流星动画场景特效

js+css3抽奖转盘旋转点餐代码

响应式太阳能能源公司网站模板

html5 canvas彩色碎片组合球形旋转动画特效

网页设计开发公司网站模板

小众时尚单品在线电子商务网站模板

响应式咖啡饮品宣传网站模板

中小型创意设计服务公司网站模板

css鼠标跟随文字模糊特效

HTML5现代家居装潢公司网站模板

HTML5 Canvas竖直流动线条背景动画特效

html5 canvas进度条圆环图表统计动画特效

响应式时尚单品在线商城网站模板

canvas炫酷鼠标移动文字粒子特效

现代时尚家具公司网站模板

css+js实现的颜色渐变数字时钟动画特效

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