黑马程序员 同步辅助类【Samphore】
来源:互联网 发布:淘宝意外险 编辑:程序博客网 时间:2024/05/26 05:52
java.util.concurrent
类 Semaphore
API介绍:
一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire()
,然后再获取该许可。每个release()
添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore
只对可用许可的号码进行计数,并采取相应的行动。
其实该类的aquire和release方法类似于Codition的await和signal,但是Semaphore对象可以控制当前线程的运行数量而Condition不能做到
应用情景:服务器线程访问资源可以用Semaphore来限制访问线程的数量
构造方法摘要
Semaphore(int permits) 创建具有给定的许可数和非公平的公平设置的 Semaphore。
Semaphore(int permits, boolean fair) 创建具有给定的许可数和给定的公平设置的 Semaphore。
方法摘要
void
acquire() 从此信号量获取一个许可,在提供一个许可前一直将线程阻塞,否则线程被中断。
void
acquire(int permits) 从此信号量获取给定数目的许可,在提供这些许可前一直将线程阻塞,或者线程已被中断。
void
acquireUninterruptibly() 从此信号量中获取许可,在有可用的许可前将其阻塞。
void
acquireUninterruptibly(int permits) 从此信号量获取给定数目的许可,在提供这些许可前一直将线程阻塞。
int
availablePermits() 返回此信号量中当前可用的许可数。
int
drainPermits() 获取并返回立即可用的所有许可。
protected Collection<Thread>
getQueuedThreads() 返回一个 collection,包含可能等待获取的线程。
int
getQueueLength() 返回正在等待获取的线程的估计数目。
boolean
hasQueuedThreads() 查询是否有线程正在等待获取。
boolean
isFair() 如果此信号量的公平设置为 true,则返回 true。
protected void
reducePermits(int reduction) 根据指定的缩减量减小可用许可的数目。
void
release() 释放一个许可,将其返回给信号量。
void
release(int permits) 释放给定数目的许可,将其返回到信号量。
String
toString() 返回标识此信号量的字符串,以及信号量的状态。
boolean
tryAcquire() 仅在调用时此信号量存在一个可用许可,才从信号量获取许可。
boolean
tryAcquire(int permits) 仅在调用时此信号量中有给定数目的许可时,才从此信号量中获取这些许可。
boolean
tryAcquire(int permits, long timeout,TimeUnit unit) 如果在给定的等待时间内此信号量有可用的所有许可,并且当前线程未被中断,则从此信号量获取给定数目的许可。
boolean
tryAcquire(long timeout,TimeUnit unit) 如果在给定的等待时间内,此信号量有可用的许可并且当前线程未被中断,则从此信号量获取一个许可。
运行结果如下:
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
- 黑马程序员 同步辅助类【Samphore】
- 黑马程序员 同步辅助类【CountDownLatch】、
- 黑马程序员 同步辅助类[CylicBarrier]
- 黑马程序员--C#数据库辅助类(简单版)
- CountDownLatch同步辅助类
- 线程同步辅助类
- 线程同步辅助类
- 多线程同步辅助类
- 同步辅助类CyclicBarrier
- 线程同步辅助类
- CountDownLatch -- 同步辅助类
- 黑马程序员----多线程之同步工具类
- 黑马程序员-线程同步
- 黑马程序员---异常,同步
- 黑马程序员 线程同步
- 黑马程序员 多线程同步
- 黑马程序员--多线程同步
- 黑马程序员_同步
- 一步步学习stm32...
- 关于视频的一些基本概念——视频格式、视频编码、压缩率的关系
- Deep Learning 博文推荐和学习资料
- UVA 714 不知道为什么就是挑不出来这里记录一下。另外贴下D_double的代码把
- 设计模式之策略模式笔记
- 黑马程序员 同步辅助类【Samphore】
- java学习历程——第一篇.如何使用java软件
- Matlab柱坐标相关问题
- U-Boot移植之前期分析(上)
- 带头结点的单链表( 冒泡排序 一次遍历求中间结点的值) 链表 就地反转 倒数第k个结点
- 语言文件.po .pot和.mo简介及汉化
- 【Linux 入门笔记】使用fdisk进行磁盘管理
- 陆奇讲座记录与感想
- TabActivity中onKeyDown无法响应的解决方法及连续点击两次退出应用程序