Java多线程通信:信号量问题示例
在Java多线程编程中,信号量(Semaphore)是一种特殊的共享变量,用于控制同时访问某个资源的线程数量。
以下是一个简单的信号量问题示例:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private final Semaphore mutex = new Semaphore(1); // 初始化信号量为1
public void threadFunction() throws InterruptedException {
mutex.acquire(); // 请求获取锁,如果已满,则会阻塞
// 这里是需要多线程协作的代码
System.out.println("Thread is working...");
mutex.release(); // 释放锁,其他等待的线程可以获取
}
public static void main(String[] args) {
SemaphoreExample example = new SemaphoreExample();
Thread thread1 = new Thread(example::threadFunction, "Thread-1"));
Thread thread2 = new Thread(example::threadFunction, "Thread-2"));
thread1.start();
thread2.start();
}
}
在这个示例中,我们创建了一个信号量mutex
,初始值为1。两个线程thread1
和thread2
分别调用threadFunction
。
当一个线程请求锁时(即调用mutex.acquire()
),如果锁已满(即信号量值为0),那么当前线程会阻塞等待。
当线程释放锁后,其他等待的线程可以获取锁并继续执行。
还没有评论,来说两句吧...