在Java中实现多线程互斥,主要使用`synchronized`关键字。以下是使用`synchronized`实现互斥的几种方式:
同步方法
在方法声明前加上`synchronized`关键字,使得该方法在同一时刻只能被一个线程执行。
```java
public class SynchronizedExample {
public synchronized void synchronizedMethod() {
// 方法体
}
}
同步块
使用`synchronized`关键字和对象引用,可以锁定特定的代码块,而不是整个方法。
```java
public class SynchronizedExample {
private final Object lock = new Object();
public void methodWithSynchronizedBlock() {
synchronized (lock) {
// 同步块
}
}
}
静态同步方法
使用`synchronized`修饰静态方法,将整个类锁定,使得该类的所有实例在同一时刻只能有一个线程执行同步方法。
```java
public class SynchronizedExample {
public static synchronized void synchronizedStaticMethod() {
// 方法体
}
}
静态同步块
使用`synchronized`关键字和静态对象引用,锁定整个类。
```java
public class SynchronizedExample {
private static final Object lock = new Object();
public static void methodWithSynchronizedStaticBlock() {
synchronized (lock) {
// 同步块
}
}
}
对象锁
使用`synchronized`关键字和实例对象引用,锁定特定的实例对象。
```java
public class SynchronizedExample {
private final Object lock = new Object();
public void methodWithObjectLock() {
synchronized (this.lock) {
// 同步块
}
}
}
以上方法均可实现多线程环境下的互斥访问。选择合适的方法取决于具体的应用场景和需求。
还有什么问题我可以帮您解答吗?