您的位置:首页 > 职场人生

黑马程序员——Java基础---线程的另一个总结(8)--Semaphere同步工具,控制线程可用线程

2015-07-04 22:20 435 查看
Semaphere可以控制有多少个可用线程,如果有10个线程同时进行,那么使用Semaphere设置5个线程,那么就只有5个线程可以进入,当一个线程释放才能进入

好比厕蹲坑,只有5个坑,所以每次最多5个人蹲

availablePermits()方法可以得到当前已使用的线程数


public class SemaphoreTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final  Semaphore sp = new Semaphore(3);
for(int i=0;i<10;i++){
Runnable runnable = new Runnable(){
public void run(){
try {
sp.acquire();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() +
"进入,当前已有" + (3-sp.availablePermits()) + "个并发");
try {
Thread.sleep((long)(Math.random()*10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getName() +
"即将离开");
sp.release();
//下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元
System.out.println("线程" + Thread.currentThread().getName() +
"已离开,当前已有" + (3-sp.availablePermits()) + "个并发");
}
};
service.execute(runnable);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: