Semaphore计数信号量
ExecutorService exec = Executors.newCachedThreadPool();
final Semaphore semp = new Semaphore(5);
for(int i = 0; i <20 ; i ++){
final int no = i;
Runnable run = new Runnable(){
try{
semp.acquire();
System.out.println("Accessing : " + no);
Thread.sleep(1000000);
semp.release();
}catch(InterruptedException e){}
};
exec.execute(run);
}
exec.shutdown();
}
信号量维护了一个许可集,若有必要,在许可可用前会阻塞每一个acquire(),然后再取得该许可。每个release()添加一个许可,从而可能释放一个正在阻塞的获取者,但不是用实际的许可对象。Semaphore只可对许可的号码进行认证,并采取相应的行动,拿到信号量的线程可以进入代码,否则就等待,通过acquire()和release()获取和释放访问许可。
acquire():从信号量获得一个许可。在提供许可前线程一直被阻塞,否则线程被中断。获取一个许可并立即返回,将可用的许可数减1。若没有可用的许可,禁止将当前线程用于线程安排目的,并使其处于休眠状态,直到某些其它线程调用此信号量的release()方法,并且当前线程是下一个要被分配到许可的线程,或其他线程中断了当前线程。
若当前线程的中断状态被设置为on或在等待许可时被中断,则会抛出InterruptException,并且清除当前线程的已中断状态。
release():释放一个许可,将其返回给信号量。释放一个许可,将可用的许可数加1。若任意线程试图获取许可,则选中一个线程并将刚刚释放的许可给它,针对线程安排目的启用该线程,不要求释放的许可线程必须通过acquire()获取许可。
Semaphore计数信号量的更多相关文章
- Semaphore(计数信号量)
//对象池public class Pool<T> { private int size; private List<T> items = new ArrayList<T ...
- 并发教程--JAVA5中 计数信号量(Counting Semaphore)例子
并发教程--JAVA5中 计数信号量(COUNTING SEMAPHORE)例子 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java中的计数信息量(C ...
- 【C#】【Thread】Semaphore/SemaphoreSlim信号量
System.Threading.Semaphore 类表示一个命名(系统范围)信号量或本地信号量. 它是一个对 Win32 信号量对象的精简包装. Win32 信号量是计数信号量,可用于控制对资源池 ...
- Java之多线程 Semaphore(信号量)
一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...
- CountDownLatch(闭锁)、Semaphore(信号量)、CyclicBarrier
一.CountDowmLatch(闭锁)(倒计数锁存器) CountDownLatch类位于java.util.concurrent包下,在完成某些运算时,只有其他所有线程的运算全部完成,当前运算才继 ...
- 源码分析:Semaphore之信号量
简介 Semaphore 又名计数信号量,从概念上来讲,信号量初始并维护一定数量的许可证,使用之前先要先获得一个许可,用完之后再释放一个许可.信号量通常用于限制线程的数量来控制访问某些资源,从而达到单 ...
- java并发编程学习:用 Semaphore (信号量)控制并发资源
并发编程这方面以前关注得比较少,恶补一下,推荐一个好的网站:并发编程网 - ifeve.com,上面全是各种大牛原创或编译的并发编程文章. 今天先来学习Semaphore(信号量),字面上看,根本不知 ...
- [Go] Go的WaitGroup计数信号量
WaitGroup是一个计数信号量,可以用来记录并维护运行的goroutine,如果WaitGroup的值大于0,Wait方法就会阻塞 调用Done方法来减少WaitGroup的值,并最终释放main ...
- freeRTOS中文实用教程3--中断管理之计数信号量
1.前言 在中断不频繁的系统中,使用二值信号量没有问题,但是中断频繁发生时,则会有中断丢失的问题. 因为中断发生时延迟任务执行,延迟任务执行的过程中,如果又来了两次中断,则只会处理第一次,第二次将会丢 ...
随机推荐
- meta标签常用设置
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- 安卓——AppTheme
<?xml version="1.0" encoding="utf-8"?> <resources> <style name=&q ...
- python and pycharm and django 环境配置
python 安装 https://www.python.org/ 我的是win7 32位,下载exe文件傻瓜式安装…… cmd 输入命令 python 则安装成功 如果不能进入,则有可能是环境 ...
- ActiveMQ 的连接和会话
要了解 connection 和 session 的概念,可以先从 ConnectionState 和 SessionState 入手: // 省略部分代码 public class Connecti ...
- 自签名证书说明——自签名证书的Issuer和Subject是一样的。不安全的原因是:没有得到专业SSL证书颁发的机构的技术支持?比如使用不安全的1024位非对称密钥对,有效期设置很长等
一般的数字证书产品的主题通常含有如下字段:公用名称 (Common Name) 简称:CN 字段,对于 SSL 证书,一般为网站域名:而对于代码签名证书则为申请单位名称:而对于客户端证书则为证书申请者 ...
- 关于JAVA的一些知识点
1.java.lang.Runtime.getRuntime().availableProcessors() Returns the number of processors available to ...
- 未能加载文件或程序集“Oracle.DataAccess”或它的某一个 依赖项。如何解决?
之前项目做大数据批量添加使用了OracleBulkCopy,这个是引用Oracle.DataAccess.Client的命名空间,所以项目要引用一个Oracle.DataAccess.dll, 但是运 ...
- Java Web(六) JSP
现在的Java Web开发已经很少使用JSP脚本了,业务逻辑都交给Servlet处理,JSP只负责显示视图,所以接下来的内容就对JSP脚本不做叙述了... JSP概述 JSP全名为Java Serve ...
- laravel模型关联:
一对一hasOne(用户-手机号) 一对多has Many(文章-评论) 一对多反向belongsTo(评论-文章) 多对多belongsToMany(用户-角色) 远层一对多hasManyThrou ...
- Win10系列:VC++媒体播放控制1
在MediaElement控件中定义了用于控制视频播放的函数,如Play.Pause和Stop等函数.本小节将在20.6.1小节所新建的项目基础上继续来介绍如何为视频添加播放控制,并在最后一部分给出项 ...