黑马程序员——Java基础---线程的另一个总结(8)--Semaphere同步工具,控制线程可用线程
2015-07-04 22:20
435 查看
Semaphere可以控制有多少个可用线程,如果有10个线程同时进行,那么使用Semaphere设置5个线程,那么就只有5个线程可以进入,当一个线程释放才能进入
好比厕蹲坑,只有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); } } }
相关文章推荐
- 黑马程序员——3,JAVA基础(函数,数组相关)
- 黑马程序员——Java基础---线程的另一个总结(7)--condition,await
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- Java面试求职之Java编程基础
- 面试题29:数组中出现次数超过一半的数字
- 一次面试失败的收获
- 程序员需要知道的10大编程格言
- 黑马程序员-面向对象
- 黑马程序员——Java基础---线程的另一个总结(6)--线程读写锁,缓存小例子
- 漫谈程序员系列:怎么告别“混日子”
- 转载面试
- 找出字符串中第1个只出现1次的字符
- 黑马程序员——Java基础---线程的另一个总结(5)--线程池,线程定时器
- 面试题25:二叉树中和为某一值的路径
- 黑马程序员——函数
- 黑马程序员——程序流程控制
- 黑马程序员——关键字,标识符,注释,常量,变量
- [心得]传统IT转互联网面试经验分享
- java面试题及答案(基础题122道,代码题19道)
- Java面试宝典2015版