信号量通过许可机制控制并发访问,Java中Semaphore类提供acquire()和release()方法实现线程同步,支持公平与非公平模式,限制同时访问资源的线程数。

在Java中,信号量(Semaphore)是一种用于控制多个线程对共享资源访问的同步工具。它通过维护一组许可来限制同时访问特定资源的线程数量。使用信号量可以有效实现线程间的协调与同步。
信号量内部维护一定数量的许可(permits)。线程在访问资源前必须先获取许可,成功获取后才能执行操作;操作完成后需释放许可,以便其他线程使用。如果当前没有可用许可,试图获取的线程将被阻塞,直到有线程释放许可为止。
Java中的 Semaphore 类位于 java.util.concurrent 包中,支持公平和非公平两种模式:
通过构造函数初始化信号量,指定许可数量。常用方法包括 acquire() 和 release()。
立即学习“Java免费学习笔记(深入)”;
示例代码:
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
private static final Semaphore semaphore = new Semaphore(2); // 允许最多2个线程同时访问
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
new Thread(new Worker(i)).start();
}
}
static class Worker implements Runnable {
private int id;
Worker(int id) {
this.id = id;
}
public void run() {
try {
System.out.println("线程 " + id + " 正在尝试获取许可...");
semaphore.acquire(); // 获取许可
System.out.println("线程 " + id + " 获得许可,开始工作");
Thread.sleep(2000); // 模拟工作
System.out.println("线程 " + id + " 工作完成,释放许可");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
semaphore.release(); // 释放许可
}
}
}
}
信号量适用于以下场景:
使用时注意:
以上就是如何在Java中通过信号量同步线程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号