`

Semaphore使用方法(三)

阅读更多
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();
    }
}

 

0
0
分享到:
评论

相关推荐

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 ...

    java并发编程三剑客

    目录java并发编程三剑客思维导图CountDownLatch用法构造器以及方法构造器主要方法使用方法CyclicBarrier用法构造器以及主要方法构造器主要方法使用方法Semaphore用法构造器和主要方法构造器主要方法使用方法三种辅助...

    《Visual C++范例大全》随书光盘 第十一章

    第11章 实例257——使用Win32 ... 实例274——三种方法实现启动其他的应用程序 实例275——使用剪贴板实现程序间的数据交换 实例276——通过内存映射实现进程间的数据交换 实例277——通过消息机制实现进程间的通信

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4  高并发编程第三阶段16讲 CountDownLatch经典案例...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4  高并发编程第三阶段16讲 CountDownLatch经典案例...

    这就是标题—— JUC.pdf

    JUC是什么 线程 进程 / 线程 线程状态 wait / sleep 并发 / 并行 Lock 使用Lock锁 可重入锁 公平锁 / 非公平锁 ...线程池三大方法 线程池七大参数 线程池四种拒绝策略 ForkJoin 异步回调 Volatile 指令重排 JMM

    个人总结的深入java多线程开发

    三. 线程之间协作 17 1)演示简单的消费者和生产者的例子: 17 2)管道的读写流处理方式 19 3)重要的演示死锁的问题—哲学家就餐问题 20 4)终止多线程程序的两种方式(轮询访问变量和interrupt方法) 23 四Concurrent包...

    javaSE代码实例

    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...

    windows线程几种同步方式

    线程同步的几种方式的c++方法,Mutex,Event,Semaphore等

    spring.net中文手册在线版

    使用方法的返回值进行注入 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....

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 ...

    CLR.via.C#.(中文第3版)(自制详细书签)

    11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 Framework...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象 11.1.4 第四步:定义方法将输入转化为期望事件 11.2 编译器如何实现事件 11.3 设计侦听事件的类型 11.4 显式实现事件 第12章 泛型 12.1 ...

    操作系统课程设计(生产者-消费者,存储管理,虚拟存储器

    使用这些对象都分为三个步骤,一是创建或者初始化; 接着请求该同步对象,随即进入临界区,这一步对应于互斥量的上锁;最后释放该同步对象,这对应于互斥量的解锁。这些同步对象在主进程中创建,在其子线程中都可。 ...

    java jdk实列宝典 光盘源代码

    线程同步装置:semaphore countdownlatch cyclicbarrier exchanger; 17 java与xml 用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的...

    Java JDK实例宝典

    15 线程——Semaphore 16. 16 线程——CountDownLatch 16. 17 线程——Cycli Barrier 16. 18 线程——Exchanger 16. 19 线程——BlockingQueue 第17章 Java与XML 17. 1 用DOM处理XML文档 ...

    php多进程框架-模拟java多线程接口simple-fork-php.zip

    提供第三方进程通信机制(Redis等) 更多的测试及示例程序 示例程序 更多示例程序见exmples目录 simple.php class TestRunnable extends \Jenner\SimpleFork\Runnable{ /**  * ...

    jQuery实现首页图片淡入淡出效果的方法

    本文实例讲述了jQuery实现首页图片淡入淡出效果的方法。分享给大家供大家参考。具体分析如下: 这里演示当当网的品牌店铺首页效果,演示地址为:http://static.dangdang.com/gm/topic/2270_181320.shtml 效果图如下...

    操作系统实验报告.docx

    三、实验代码 #include &lt;stdio.h&gt; #include &lt;pthread.h&gt; #include &lt;semaphore.h&gt; 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...

    Java并发编程实战

    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 ...

Global site tag (gtag.js) - Google Analytics