原创 

java synchronized 对象锁详解

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

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

 工具推荐 更多»