package thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
public class TestSemaphore {
public static void main(String[] args) {
// 线程池
ExecutorService exec = Executors.newCachedThreadPool();
// 只能5个线程同时访问
final Semaphore semp = new Semaphore(5);
// 模拟20个客户端访问
for (int index = 0; index < 20; index++) {
final int NO = index;
Runnable run = new Runnable() {
public void run() {
try {
// 获取许可
semp.acquire();
System.out.println("Accessing: " + NO);
Thread.sleep((long) (Math.random() * 10000));
// 访问完后,释放
semp.release();
System.out.println("-----------------" + semp.availablePermits());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
exec.execute(run);
}
// 退出线程池
exec.shutdown();
}
}多线程 : Java 信号量 Semaphore 使用
最新推荐文章于 2024-09-12 01:47:00 发布
本文介绍了一个使用Java的Semaphore来限制并发访问数量的例子。通过创建一个固定大小的线程池和Semaphore,确保任何时候只有五个线程可以访问资源,其余线程则等待许可。此示例演示了如何在高并发场景下合理分配资源。
257

被折叠的 条评论
为什么被折叠?



