Java synchronized(this)与synchronized(object)的区别
时间: 2024-06-13 11:06:53 浏览: 94
Java Synchronized锁失败案例及解决方案
5星 · 资源好评率100%
Java中的synchronized关键字可以用于方法或代码块,用于实现多线程同步。synchronized(this)和synchronized(object)都是用于同步代码块的,但是它们的作用范围是不同的。
synchronized(this)用于同步当前对象的代码块,即在当前对象上加锁。这意味着在同一时刻只有一个线程可以执行该代码块,其他线程必须等待锁释放后才能执行该代码块。这种方式可以避免多个线程同时访问当前对象的实例变量或方法,从而保证线程安全。
synchronized(object)用于同步指定对象的代码块,即在指定对象上加锁。这意味着在同一时刻只有一个线程可以执行该代码块,其他线程必须等待锁释放后才能执行该代码块。这种方式可以避免多个线程同时访问指定对象的实例变量或方法,从而保证线程安全。
需要注意的是,synchronized(this)和synchronized(object)的作用范围不同,前者只能同步当前对象的代码块,而后者可以同步任意对象的代码块。因此,在使用synchronized关键字时,应该根据具体情况选择合适的同步方式。
下面是一个使用synchronized(this)同步代码块的例子:
```java
public class MyClass {
public void method() {
synchronized (this) {
// 同步代码块
}
}
}
```
下面是一个使用synchronized(object)同步代码块的例子:
```java
public class MyClass {
private final Object lock = new Object();
public void method() {
synchronized (lock) {
// 同步代码块
}
}
}
```
阅读全文