java并发包里的semaphore的用法
2014-06-12 00:00
447 查看
摘要: java.util.concurrent包里的semaphore,jdk里解释为计数信号量,这个听起来有些晦涩,现在我们姑且把它理解为信号灯吧。
日常生活中,我们可能经常会做火车,当我们想上厕所的时候,我们通常会看一下车厢与车厢之间的门上有个信号灯,如果那个信号灯是红的,则厕所里有人;否则,厕所里没人。所以,现在我们就把这个semaphore理解为厕所上面那个信号灯吧。
当然,火车上厕所里只有一个坑,只允许一个人进去。然而在笔者的童年时代都是一厕多坑的。
那么我们现在想象一下,如果一个厕所有4个坑,但是现在10个人上厕所,笔者就想在厕所门口挂4个灯,每进去一个人都要取走一盏灯进去,出来的时候,再把灯重新挂在厕所门口。这样,世界瞬间变的美好了。
代码:
日常生活中,我们可能经常会做火车,当我们想上厕所的时候,我们通常会看一下车厢与车厢之间的门上有个信号灯,如果那个信号灯是红的,则厕所里有人;否则,厕所里没人。所以,现在我们就把这个semaphore理解为厕所上面那个信号灯吧。
当然,火车上厕所里只有一个坑,只允许一个人进去。然而在笔者的童年时代都是一厕多坑的。
那么我们现在想象一下,如果一个厕所有4个坑,但是现在10个人上厕所,笔者就想在厕所门口挂4个灯,每进去一个人都要取走一盏灯进去,出来的时候,再把灯重新挂在厕所门口。这样,世界瞬间变的美好了。
代码:
package com.core.semaphore; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; public class SemaphoreTest { public static void main(String[] args) { //10上厕所的人 final ExecutorService execu = Executors.newFixedThreadPool(10); //只有四个坑,我把厕所门口放4个信号灯 final Semaphore s = new Semaphore(4); //模拟10个人上厕所,但是厕所里只有4个坑,只能容纳4个同时在里面 for(int i=0;i<10;i++){ final int NO=i+1; Runnable run = new Runnable() { @Override public void run() { try { //拿到信号灯 s.acquire(); System.out.println("线程:"+NO+"来了。。。"); Thread.sleep((long) (Math.random()*10000)); //拉完了,把信号灯重新挂在厕所门口 System.out.println("线程:"+NO+"拉完了。。。"); s.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }; execu.execute(run); } execu.shutdown(); } }
相关文章推荐
- java并发工具包:Semaphore的用法
- 动画演示JAVA并发包用法的项目
- [沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
- 聊聊高并发(二十五)解析java.util.concurrent各个组件(七) 理解Semaphore
- JAVA并发信号量 Semaphore
- java并发之Semaphore
- Java Semaphore用法
- java 多线程之Semaphore互斥类的用法
- Java_并发线程_Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- 黑马程序员——Java5中的线程并发库(二)--Semaphore实现信号灯、其他同步函数、可阻塞的队列、同步集合
- Java中同步与并发用法分析
- Java Semaphore用法
- Java中的Semaphore--用于多线程中控制资源并发访问的线程数
- 【Java并发编程】并发新特性—信号量Semaphore(含代码)
- 转发---[沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
- JAVA并发操作——Thread常见用法(Sleep,yield,后台线程)
- Java Semaphore用法
- Java 并发专题 : Semaphore 实现 互斥 与 连接池
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- java并发编程之Semaphore