这里只介绍Semaphoree的使用和场景,源码后期再分解
Semaphoree作为限流使用,限制线程并发访问数量。
Semaphoree的四个重要方法:
public void acquire() //开启通道,默认为1
public void release() //释放通道,默认为1
public void acquire(int arg) //开启通道,动态开启
public void release(int arg) //释放通道,动态释放
简单代码实例:
public class MySemaphoree {
public static void main(String[] args) {
Semaphore s = new Semaphore(5);//初始化5个通道
ExecutorService e = Executors.newFixedThreadPool(10);
for(int i=0;i<10;i++){
e.submit(()->{
try {
s.acquire();//每个线程获得一个通道,所以控制职能5个线程并发,可动态改变一个线程获取通道的数量
TimeUnit.SECONDS.sleep(2);
System.out.println(Thread.currentThread().getName()+"执行中---");
s.release();//执行完释放一个通道
} catch (Exception e1) {
e1.printStackTrace();
}
});
}
e.shutdown();
}
}
每5个线程并发执行。起到限流的作用