`
Cages
  • 浏览: 103087 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Semaphore

 
阅读更多

Semaphore 通常用于限制可以访问某些资源的线程数目,demo:

 

package com.jerry.concurrency.semaphore;



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


//排队上厕所
public class Test {
public static void main(String[] args) {
ExecutorService 人 =Executors.newCachedThreadPool();
final Semaphore 茅坑 =new Semaphore(2);
for(int i=0;i<10;i++){
人.submit(new Runnable() {
@Override
public void run() {
try{
茅坑.acquire();
System.out.println("人["+Thread.currentThread().getName()+"]进入厕所,还有"+茅坑.availablePermits()+"个空坑");
System.out.println("人["+Thread.currentThread().getName()+"]获得坑位,开始大便...");
Thread.sleep((int)(Math.random()*1000));
} catch(Exception e){
e.printStackTrace();
}finally{
System.out.println("人["+Thread.currentThread().getName()+"]使用完毕离开,当前还有"+(茅坑.availablePermits()+1)+"个空坑");
茅坑.release();
}
}
});
}
人.shutdown();
茅坑.acquireUninterruptibly(2);
System.out.println("使用完毕,阿姨需要清扫了卫生了!");
茅坑.release(2);
}


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics