JAVA Semaphore实现信号灯
来源:互联网 发布:单片机与计算机的区别 编辑:程序博客网 时间:2024/05/16 13:03
lSemaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。
ØSemaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用了。
Ø另外等待的5个人中可以是随机获得优先机会,也可以是按照先来后到的顺序获得机会,这取决于构造Semaphore对象时传入的参数选项。
l单个信号量的Semaphore对象可以实现互斥锁的功能,并且可以是由一个线程获得了“锁”,再由另一个线程释放“锁”,这可应用于死锁恢复的一些场合。
管理停车位,一个小的电子设备,实时性强就要semaphore。
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);}}}
- JAVA Semaphore实现信号灯
- Java—Semaphore实现信号灯
- JAVA多线程—Semaphore实现信号灯
- Semaphore实现信号灯
- Semaphore实现信号灯
- Semaphore实现信号灯
- Semaphore实现信号灯
- Semaphore实现信号灯
- Semaphore实现信号灯
- 9.Semaphore实现信号灯
- Semaphore实现信号灯
- semaphore实现信号灯
- Semaphore 信号灯 java示例
- java线程系列---Semaphore信号灯
- Java高级之信号灯Semaphore
- semaphore信号灯
- Semaphore 信号灯
- semaphore信号灯
- 关于COPY-ON-WRITE [转贴
- 字符编码笔记:ASCII,Unicode和UTF-8
- BusyBox的安装
- SQL Server2005安装教程
- 快到极致的Android模拟器——Genymotion
- JAVA Semaphore实现信号灯
- 【Win8系统:速度快、启动快、关机慢 】
- Tornado 源码
- 我算是优秀的程序员吗?
- JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
- 17-判断用户名是否有效(字符串处理)
- java其他同步工具类
- 链表合并
- 【PHP】基础笔记 01 —— 基本语法