package com.yonge.lock;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
/**
* 需求:模拟一个厕所有3个坑,现在有10个人想上厕所,那么首先会有三个人进去,其他人都在外面等着,然后,三个人中有任何人先出来,那么马上又有人进去...
* @author wb-gaoy
* @version $Id: MySemaphore.java,v 0.1 2012-1-4 下午3:30:03 wb-gaoy Exp $
*/
public class MySemaphore {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
//构造三个坑
final Semaphore semaphore = new Semaphore(3);
//构造十个人
final int count = 20;
for (int i = 0; i < count; i++) {
Runnable runnable = new Runnable() {
public void run() {
try {
semaphore.acquire();
System.out.println("线程" + Thread.currentThread().getName() + "进入,当前 还有"
+ semaphore.availablePermits() + "个空坑..");
Thread.sleep((long) (Math.random() * 10000));
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
System.out.println("线程" + Thread.currentThread().getName() + "离开,当前 还有"
+ (semaphore.availablePermits() + 1) + "个空坑..");
semaphore.release();
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
分享到:
相关推荐
11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 ...
目录java并发编程三剑客思维导图CountDownLatch用法构造器以及方法构造器主要方法使用方法CyclicBarrier用法构造器以及主要方法构造器主要方法使用方法Semaphore用法构造器和主要方法构造器主要方法使用方法三种辅助...
第11章 实例257——使用Win32 ... 实例274——三种方法实现启动其他的应用程序 实例275——使用剪贴板实现程序间的数据交换 实例276——通过内存映射实现进程间的数据交换 实例277——通过消息机制实现进程间的通信
高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4 高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4 高并发编程第三阶段16讲 CountDownLatch经典案例...
高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4 高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4 高并发编程第三阶段16讲 CountDownLatch经典案例...
JUC是什么 线程 进程 / 线程 线程状态 wait / sleep 并发 / 并行 Lock 使用Lock锁 可重入锁 公平锁 / 非公平锁 ...线程池三大方法 线程池七大参数 线程池四种拒绝策略 ForkJoin 异步回调 Volatile 指令重排 JMM
三. 线程之间协作 17 1)演示简单的消费者和生产者的例子: 17 2)管道的读写流处理方式 19 3)重要的演示死锁的问题—哲学家就餐问题 20 4)终止多线程程序的两种方式(轮询访问变量和interrupt方法) 23 四Concurrent包...
16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在运行的线程 372 16.6 volatile关键字的含义与使用 372 16.7 小结 373 第17章 高级线程开发 374 17.1 线程池的使用 374 17.1.1...
线程同步的几种方式的c++方法,Mutex,Event,Semaphore等
使用方法的返回值进行注入 4.3.6.IFactoryObject接口的其它实现 4.3.6.1.Log4Net 4.3.7.使用depends-on 4.3.8.自动装配协作对象 4.3.9.检查依赖项 4.4.类型转换 4.4.1.枚举类型的转换 4.4.2.内置的类型转换器 4.4.3....
11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 ...
11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 Framework...
11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 ...
使用这些对象都分为三个步骤,一是创建或者初始化; 接着请求该同步对象,随即进入临界区,这一步对应于互斥量的上锁;最后释放该同步对象,这对应于互斥量的解锁。这些同步对象在主进程中创建,在其子线程中都可。 ...
线程同步装置:semaphore countdownlatch cyclicbarrier exchanger; 17 java与xml 用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的...
15 线程——Semaphore 16. 16 线程——CountDownLatch 16. 17 线程——Cycli Barrier 16. 18 线程——Exchanger 16. 19 线程——BlockingQueue 第17章 Java与XML 17. 1 用DOM处理XML文档 ...
提供第三方进程通信机制(Redis等) 更多的测试及示例程序 示例程序 更多示例程序见exmples目录 simple.php class TestRunnable extends \Jenner\SimpleFork\Runnable{ /** * ...
本文实例讲述了jQuery实现首页图片淡入淡出效果的方法。分享给大家供大家参考。具体分析如下: 这里演示当当网的品牌店铺首页效果,演示地址为:http://static.dangdang.com/gm/topic/2270_181320.shtml 效果图如下...
三、实验代码 #include <stdio.h> #include <pthread.h> #include <semaphore.h> int stack[8]; int size1=0; int size2=4; int size=0; sem_t sem; int flag1=0; // define the exclusive number int flag2=0; int...
14.6.2 Semaphore与CountDownLatch258 14.6.3 FutureTask259 14.6.4 ReentrantReadWriteLock259 第15章 原子变量与非阻塞同步机制261 15.1 锁的劣势261 15.2 硬件对并发的支持262 15.2.1 比较并交换263 ...