java.util.concurrent.Semaphore
2015-11-25 15:48
519 查看
public class SemaphoreDemo { public static void main(String[] args) { //信号量,解决了允许固定个数的线程同时访问共享资源 final Semaphore semaphore = new Semaphore(3); for (int i = 0; i < 10; i++) { new Thread(new Runnable() { @Override public void run() { try { semaphore.acquire();// 获得许可 System.out.println(Thread.currentThread().getName() + ": 来了...现在有"+(3-semaphore.availablePermits())+"位顾客"); TimeUnit.SECONDS.sleep(new Random().nextInt(5)); System.out.println("-->"+Thread.currentThread().getName() + ": 走了..."); semaphore.release();// 释放许可 } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } } }
Thread-0: 来了...现在有1位顾客 Thread-2: 来了...现在有3位顾客 Thread-1: 来了...现在有2位顾客 -->Thread-2: 走了... Thread-4: 来了...现在有3位顾客 -->Thread-1: 走了... Thread-6: 来了...现在有3位顾客 -->Thread-0: 走了... -->Thread-4: 走了... Thread-8: 来了...现在有3位顾客 Thread-5: 来了...现在有3位顾客 -->Thread-5: 走了... Thread-9: 来了...现在有3位顾客 -->Thread-6: 走了... Thread-3: 来了...现在有3位顾客 -->Thread-3: 走了... Thread-7: 来了...现在有3位顾客 -->Thread-8: 走了... -->Thread-9: 走了... -->Thread-7: 走了...
相关文章推荐
- 使用atomikos处理ActiveMQ在Spring环境的XA事务
- java.util.concurrent.Exchanger
- spring security 安全框架remember me,demo学习
- 【JavaEE】SSH+Spring Security基础上配置AOP+log4j
- java.util.concurrent.CyclicBarrier
- 学习struts2 (1)
- java.util.concurrent.CountDownLatch
- Java集合---ArrayList的实现原理
- java学习笔记--java第一课,java入门基础篇
- Spring MVC 教程,快速入门,深入分析
- eclipse jad 反编译 插件安装
- 解决eclipse内存溢出
- spring mvc写XML的时候出现过的问题
- SSH框架学习(三、在struts基础上加入spring)
- springmvc 类对象新的理解
- 第一天开通博客,写点什么
- Java变量初始化流程及其中的一些问题
- 通过Java代码设置layout_weight
- Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包
- 35 个 Java 代码性能优化总结