Java中的synchronized关键字用于实现多线程同步,保证在同一时间只有一个线程访问某个共享资源。下面将介绍一些synchronized的使用方法。
1. 同步方法
可以使用synchronized关键字修饰方法,将方法声明为同步方法。
public synchronized void method() {
// 这里是需要同步的代码块
}
当一个线程访问该方法时,其他线程将被阻塞,直到当前线程执行完毕。
2. 同步代码块
除了同步方法,还可以使用synchronized关键字修饰代码块,将需要同步的代码放在同步代码块中。
public void method() {
synchronized (this) {
// 这里是需要同步的代码块
}
}
只有一个线程可以同时执行该代码块。同步代码块的锁对象可以是this,也可以是其他对象。
3. 静态同步方法
synchronized关键字还可以用于修饰静态方法,用来实现对静态资源的同步。
public static synchronized void staticMethod() {
// 这里是需要同步的代码块
}
当一个线程访问该静态方法时,其他线程也将被阻塞,直到当前线程执行完毕。
4. 同步锁对象
除了使用this作为锁对象,还可以使用其他对象作为锁对象,来实现更细粒度的同步。
private Object lock = new Object();
public void method() {
synchronized (lock) {
// 这里是需要同步的代码块
}
}
使用一个私有对象作为锁对象,可以避免使用this作为锁对象可能带来的风险。
以上是一些关于Java synchronized的使用方法,通过修饰方法、代码块,以及静态方法,可以实现对共享资源的同步控制。