控制并发线程数的Semaphore

Semaphore(信号量):是用来控制同时访问特定资源的线程数量,它通过协调各个线程以保证合理的使用公共资源。

通俗的讲,在学校1000人,食堂位置100个,食堂的座位是公共资源,但是有限,不能容纳所有学生同一时间吃饭,同一时间只能有100个学生坐在那里吃饭,信号量起到限流的作用。
废话不多说,直接代码:

package java中的并发工具类;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class Samephore {
	
	private static final int thread_count = 30;
	
	private static ExecutorService threadPool = Executors.newFixedThreadPool(thread_count);
	
	private static Semaphore s = new Semaphore(3);

	public static void main(String[] args) {

		for (int i = 0; i < thread_count; i++) {
			int icopy = i;
			threadPool.execute(new Runnable() {
				@Override
				public void run() {
					try {
						s.acquire();
						System.out.println("第"+icopy+"线程开始运行。。。");
						Thread.sleep(3000);
						System.out.println("第"+icopy+"线程结束运行。。。");
						s.release();
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			});
		}
		threadPool.shutdown();
		
	}

}

控制台:

1线程开始运行。。。
第2线程开始运行。。。
第0线程开始运行。。。
第1线程结束运行。。。
第3线程开始运行。。。
第2线程结束运行。。。
第0线程结束运行。。。
第4线程开始运行。。。
第5线程开始运行。。。
第3线程结束运行。。。
第6线程开始运行。。。
第5线程结束运行。。。
第4线程结束运行。。。
第7线程开始运行。。。
第8线程开始运行。。。
第6线程结束运行。。。
第9线程开始运行。。。
第8线程结束运行。。。
第7线程结束运行。。。
第10线程开始运行。。。
第11线程开始运行。。。
第9线程结束运行。。。
第12线程开始运行。。。
第10线程结束运行。。。
第11线程结束运行。。。
第13线程开始运行。。。
第14线程开始运行。。。
第12线程结束运行。。。
第15线程开始运行。。。
第14线程结束运行。。。
第13线程结束运行。。。
第16线程开始运行。。。
第17线程开始运行。。。
第15线程结束运行。。。
第18线程开始运行。。。
第16线程结束运行。。。
第17线程结束运行。。。
第19线程开始运行。。。
第20线程开始运行。。。
第18线程结束运行。。。
第21线程开始运行。。。
第20线程结束运行。。。
第19线程结束运行。。。
第23线程开始运行。。。
第22线程开始运行。。。
第21线程结束运行。。。
第24线程开始运行。。。
第23线程结束运行。。。
第22线程结束运行。。。
第25线程开始运行。。。
第26线程开始运行。。。
第24线程结束运行。。。
第27线程开始运行。。。
第25线程结束运行。。。
第28线程开始运行。。。
第26线程结束运行。。。
第29线程开始运行。。。
第27线程结束运行。。。
第29线程结束运行。。。
第28线程结束运行。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿立聊全栈

有作用的,有闲钱的支持一点。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值