Java中Semaphore(信号量)的使用
来源:互联网 发布:剑灵灵女萝莉捏脸数据 编辑:程序博客网 时间:2024/04/29 13:25
Semaphore的作用:
在java中,使用了synchronized关键字和Lock锁实现了资源的并发访问控制,在同一时间只允许唯一了线程进入临界区访问资源(读锁除外),这样子控制的主要目的是为了解决多个线程并发同一资源造成的数据不一致的问题。在另外一种场景下,一个资源有多个副本可供同时使用,比如打印机房有多个打印机、厕所有多个坑可供同时使用,这种情况下,Java提供了另外的并发访问控制--资源的多副本的并发访问控制,今天学习的信号量Semaphore即是其中的一种。
Semaphore实现原理初探:
Semaphore是用来保护一个或者多个共享资源的访问,Semaphore内部维护了一个计数器,其值为可以访问的共享资源的个数。一个线程要访问共享资源,先获得信号量,如果信号量的计数器值大于1,意味着有共享资源可以访问,则使其计数器值减去1,再访问共享资源。
如果计数器值为0,线程进入休眠。当某个线程使用完共享资源后,释放信号量,并将信号量内部的计数器加1,之前进入休眠的线程将被唤醒并再次试图获得信号量。
就好比一个厕所管理员,站在门口,只有厕所有空位,就开门允许与空侧数量等量的人进入厕所。多个人进入厕所后,相当于N个人来分配使用N个空位。为避免多个人来同时竞争同一个侧卫,在内部仍然使用锁来控制资源的同步访问。
Semaphore的使用:
Semaphore使用时需要先构建一个参数来指定共享资源的数量,Semaphore构造完成后即是获取Semaphore、共享资源使用完毕后释放Semaphore。
下面的代码就是模拟控制商场厕所的并发使用:
最后,Semaphore除了控制资源的多个副本的并发访问控制,也可以使用二进制信号量来实现类似synchronized关键字和Lock锁的并发访问控制功能。
- Java中信号量Semaphore的简单使用
- Java中Semaphore(信号量)的使用
- Java中Semaphore(信号量)的使用
- Java中Semaphore(信号量)的使用
- java 信号量Semaphore的使用
- Semaphore信号量的使用java
- Java中使用信号量——Semaphore
- Java中信号量 Semaphore
- Java中信号量 Semaphore
- Semaphore(信号量)的使用
- Semaphore信号量的使用
- Semaphore信号量的使用
- Java的信号量Semaphore
- 多线程 : Java 信号量 Semaphore 使用
- java多线程-Semaphore信号量使用
- java多线程-Semaphore信号量使用
- 信号量 Semaphore的使用介绍
- 信号量Semaphore的使用Demo
- 最新 PHP5.2, 5.3, 5.4, 5.5在windows安装memcached 服务端的具体方法以及各版本 php_memcache.dll 下载
- 从源码看angular/material2 中dialog模块的实现
- github中工程代码多仓库多子模块切换同步问题解决
- Spring 注解
- 在ABAP的SQL语句中写Oracle Hints
- Java中Semaphore(信号量)的使用
- Android开发必备知识:为什么说Kotlin值得一试
- 2017第10届中国国际高端饮用水产业(北京)博览会会刊(参展商名录)
- mysql单个字段区分大小写
- qq插件开发
- Java异常机制Throwable
- Android 键盘弹出头被顶上去
- vue.js在windows本地下搭建环境和创建项目
- 交互式博客