Java并发编程:信号量问题实例解析
在Java的并发编程中,信号量(Semaphore)是一种同步工具,它能够控制同时访问特定资源的线程数量。
以下是一个简单的信号量问题实例:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private final Semaphore permit = new Semaphore(1); // 初始化信号量为1
public void doSomething() {
permit.acquire(); // 获取许可,信号量减1
try {
System.out.println("Worker is doing something...");
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
permit.release(); // 释放许可,信号量加1
}
public static void main(String[] args) {
SemaphoreExample example = new SemaphoreExample();
Thread workerThread = new Thread(example::doSomething);
workerThread.start(); // 创建并启动线程
}
}
在这个例子中,我们使用一个信号量来控制一个工作区(doSomething()
)的访问。当只有一个线程在工作时,信号量值为1,其他线程需要等待获取许可;反之,当有多线程同时请求工作区时,可以并发执行,完成后释放信号量。
通过这个例子,你可以更深入地理解Java中的信号量同步机制。
还没有评论,来说两句吧...