Semaphore通过许可机制控制并发线程数,如示例中3个许可限制最多3线程执行任务,acquire()获取许可,release()释放许可,确保资源安全访问。

在Java中,Semaphore 是一种用于控制同时访问特定资源的线程数量的同步工具。它通过维护一组许可(permits)来实现并发量的限制。线程在执行关键操作前需要获取许可,执行完成后释放许可,从而实现对并发量的精确控制。
Semaphore 有两种模式:公平和非公平。默认是非公平模式,即不保证等待时间最长的线程优先获得许可。
主要方法包括:
假设我们希望最多允许3个线程同时访问某个资源,可以通过以下方式实现:
立即学习“Java免费学习笔记(深入)”;
import java.util.concurrent.Semaphore;
public class SemaphoreExample {
// 定义一个拥有3个许可的Semaphore
private static final Semaphore semaphore = new Semaphore(3);
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
new Thread(() -> {
try {
System.out.println(Thread.currentThread().getName() + " 尝试获取许可");
semaphore.acquire(); // 获取许可
System.out.println(Thread.currentThread().getName() + " 获得许可,开始执行任务");
// 模拟任务执行
Thread.sleep(2000);
System.out.println(Thread.currentThread().getName() + " 任务完成,释放许可");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
semaphore.release(); // 释放许可
}
}, "Thread-" + i).start();
}
}
}
在这个例子中,尽管启动了10个线程,但最多只有3个线程能同时执行任务,其余线程会等待前面的线程释放许可后才能继续。
Semaphore常用于以下场景:
需要注意的是:
以上就是如何在Java中实现Semaphore控制并发量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号