Java实现流控-Semaphore

简介: 网上类似文章很多,不多说,直接上代码:/** * 流控类(Semaphore实现) * * @author ln * */public class FlowControl { /** * 最大访...

网上类似文章很多,不多说,直接上代码:

/**
 * 流控类(Semaphore实现)
 * 
 * @author ln
 *
 */
public class FlowControl {

	/**
	 * 最大访问量
	 */
	private static final int MAX_ACCESS_COUNT = 20;

	/**
	 * 只能有MAX_ACCESS_COUNT个线程数同时访问
	 */
	private static final Semaphore semaphore = new Semaphore(MAX_ACCESS_COUNT);

	public static void main(String[] args) {
		// 线程池
		ExecutorService exec = Executors.newCachedThreadPool();

		// 模拟30个客户端
		for (int i = 0; i < 30; i++) {
			Runnable run = new Runnable() {
				@Override
				public void run() {
					try {
						// 1秒钟内得不到许可,则丢弃访问。
						if (semaphore.tryAcquire(1, TimeUnit.SECONDS)) {
							System.out.println("正在执行...");
							//做一些事情...
							Thread.sleep(2 * 1000);
							System.out.println("执行完毕!");
						} else {
							System.out.println("访问被拒绝!!!");
						}
					} catch (InterruptedException e) {
						e.printStackTrace();
					} finally {
						// 执行完成,释放许可。
						semaphore.release();
					}
				}
			};
			exec.execute(run);
		}

		// 关闭线程池
		exec.shutdown();
	}
}



相关文章
|
3月前
|
Java
JAVA并发编程系列(7)Semaphore信号量剖析
腾讯T2面试,要求在3分钟内用不超过20行代码模拟地铁安检进站过程。题目设定10个安检口,100人排队,每人安检需5秒。实际中,这种题目主要考察并发编程能力,特别是多个线程如何共享有限资源。今天我们使用信号量(Semaphore)实现,限制同时进站的人数,并通过信号量控制排队和进站流程。并详细剖析信号量核心原理和源码。
|
5月前
|
Java 测试技术 开发者
Java面试题:解释CountDownLatch, CyclicBarrier和Semaphore在并发编程中的使用
Java面试题:解释CountDownLatch, CyclicBarrier和Semaphore在并发编程中的使用
74 11
|
6月前
|
API
java-多线程-CountDownLatch(闭锁) CyclicBarrier(栅栏) Semaphore(信号量)-
java-多线程-CountDownLatch(闭锁) CyclicBarrier(栅栏) Semaphore(信号量)-
34 1
|
6月前
|
存储 并行计算 Java
Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
55 2
|
6月前
|
Java 数据库
深入解析Java并发包(JUC)中的Semaphore
深入解析Java并发包(JUC)中的Semaphore
|
7月前
|
Java
Java一分钟之-并发编程:线程间通信(Phaser, CyclicBarrier, Semaphore)
【5月更文挑战第19天】Java并发编程中,Phaser、CyclicBarrier和Semaphore是三种强大的同步工具。Phaser用于阶段性任务协调,支持动态注册;CyclicBarrier允许线程同步执行,适合循环任务;Semaphore控制资源访问线程数,常用于限流和资源池管理。了解其使用场景、常见问题及避免策略,结合代码示例,能有效提升并发程序效率。注意异常处理和资源管理,以防止并发问题。
64 2
|
7月前
|
Java
Java Semaphore 信号量详解
Java Semaphore 信号量详解
44 3
|
7月前
|
安全 Java 测试技术
今天我们来聊一聊Java中的Semaphore
【5月更文挑战第3天】今天我们来聊一聊Java中的Semaphore
57 3
|
7月前
|
Java 调度
JAVA同步锁Semaphore
JAVA同步锁Semaphore
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
717 0