private static void test(int threadNum) throws Exception{
System.out.println(new Date()+"=====threadNum======"+threadNum);
Thread.sleep(1000);
}
}
【允许的并发数为 3,超过 3 就丢弃/设施并发的时间,超过时间结束】
public class SemaphoreExp2 {
private final static int threadCount=200;
public static void main(String[] args) throws Exception {
//定义一个线程池
ExecutorService exec=Executors.newCachedThreadPool();
//设置允许的并发数 3
final Semaphore semaphore=new Semaphore(3);
for (int i = 0; i < threadCount; i++) {
//定义一个 final 的修饰的参数
final int threadNum=i;
exec.execute(()->{
try {
//try 获取 5 秒时间,也就是执行 5 秒。
// semaphore.tryAcquire(5000, TimeUnit.MILLISECONDS)
//获取不到就等一秒
// semaphore.tryAcquire(1, TimeUnit.SECONDS)
//尝试获取许可
if(semaphore.tryAcquire()){
test(threadNum);
//释放许可
semaphore.release();
}
} catch (Exception e) {
System.out.println("=====程序异常=====");
}
});
}
System.out.println("====finish===="+threadCount);
//当线程池不用的时候,需要关闭
exec.shutdown();
}
private static void test(int threadNum) throws Exception{
System.out.println(new Date()+"=====threadNum======"+threadNum);