Java多线程同步问题:信号量案例展示
在Java中,信号量是一种用于控制对共享资源访问的机制。以下是一个简单的信号量示例:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private Semaphore semaphore = new Semaphore(1); // 初始化信号量,初始值为1
public void acquire() {
try {
semaphore.acquire(); // 请求信号量,如果数量大于0,则成功获取并进入等待状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void release() {
try {
semaphore.release(); // 释放已获得的信号量,表示当前线程不再需要信号量了
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SemaphoreExample example = new SemaphoreExample();
// 线程1:获取信号量并执行操作
new Thread(() -> {
example.acquire(); // 获取信号量
System.out.println("Thread 1: Acquired and executing operation..."); // 执行任务
example.release(); // 释放信号量
})).start();
// 线程2:尝试获取信号量但未成功,因此进入等待状态
new Thread(() -> {
example.acquire(); // 尝试获取信号量
System.out.println("Thread 2: Attempted to acquire but waiting..."); // 进入等待状态
})).start();
}
}
在这个示例中,我们创建了一个Semaphore对象,初始值为1。有两个线程分别执行acquire()和release()操作。
- 线程1:成功获取信号量并执行任务。最后释放信号量。
- 线程2:尝试获取信号量但未成功,因此进入等待状态。当其他线程释放信号量时,它会再次尝试获取信号量。
还没有评论,来说两句吧...