1.概述
Semphore可以维护当前访问自身的线程个数,并提供了同步机制。可以控制实现同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。
代码实例:
public class SemphoreStudy {
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
Semaphore sp = new Semaphore(3);
for(int i = 0;i < 10;i++){
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
sp.acquire();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"线程进入,当前已有"+(3-sp.availablePermits())+"个并发");
try {
Thread.sleep((long)Math.random()*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"即将离开");
sp.release();
System.out.println(Thread.currentThread().getName()+"线程已经离开,当前已有"+(3-sp.availablePermits())+"个并发");
}
};
executorService.execute(runnable);
}
}
}
运行结果: