synchronized使用详细
时间: 2023-12-07 12:33:37 浏览: 73
synchronized是Java中用来实现同步的关键字,可以用于修饰代码块和方法。它的主要作用是保证在同一时刻只有一个线程可以进入被synchronized修饰的代码块或方法,从而避免多个线程同时访问共享资源造成的数据不一致问题。
synchronized的使用方式有以下几种:
1. 修饰代码块
synchronized可以用来修饰代码块,格式如下:
```
synchronized (obj) {
//需要同步的代码
}
```
其中,obj是一个共享的对象,多个线程可以共享同一个obj对象。当线程进入synchronized代码块时,会尝试获取obj对象的锁,如果获取成功,就可以执行同步代码块中的代码,执行完后释放锁。
2. 修饰方法
synchronized也可以用来修饰方法,格式如下:
```
public synchronized void method() {
//需要同步的代码
}
```
当一个线程调用该方法时,会尝试获取该对象的锁,如果获取成功,就可以执行方法中的代码,执行完后释放锁。
需要注意的是,synchronized修饰的方法是针对对象的,如果同一个对象的多个线程同时访问该方法,只有一个线程能够执行,其他线程需要等待。
3. 修饰静态方法
synchronized还可以用来修饰静态方法,格式如下:
```
public static synchronized void method() {
//需要同步的代码
}
```
与修饰普通方法类似,当一个线程调用该静态方法时,会尝试获取该类的Class对象的锁,如果获取成功,就可以执行方法中的代码,执行完后释放锁。
需要注意的是,synchronized修饰的静态方法是针对类的,如果多个线程同时访问该方法,只有一个线程能够执行,其他线程需要等待。
4. 修饰对象
synchronized还可以用来修饰对象,格式如下:
```
public void method() {
synchronized(this) {
//需要同步的代码
}
}
```
当一个线程调用该方法时,会尝试获取该对象的锁,如果获取成功,就可以执行同步代码块中的代码,执行完后释放锁。
需要注意的是,synchronized修饰的对象是针对对象的,如果同一个对象的多个线程同时访问该方法,只有一个线程能够执行,其他线程需要等待。
总结:
synchronized是Java中用来实现同步的关键字,可以用于修饰代码块和方法。它的主要作用是保证在同一时刻只有一个线程可以进入被synchronized修饰的代码块或方法,从而避免多个线程同时访问共享资源造成的数据不一致问题。需要注意的是,synchronized修饰的对象是针对对象的,如果同一个对象的多个线程同时访问该方法,只有一个线程能够执行,其他线程需要等待。
阅读全文