Semaphore (通常用于限制可以访问某些资源(物理或逻辑的)的线程数目)
来源:互联网 发布:手机端刷机软件 编辑:程序博客网 时间:2024/06/06 03:18
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)
如果在给定的等待时间内,此信号量有可用的许可并且当前线程未被中断,则从此信号量获取一个许可。
//API中示例代码
class Pool { private static final int MAX_AVAILABLE = 100; private final Semaphore available = new Semaphore(MAX_AVAILABLE, true); public Object getItem() throws InterruptedException { available.acquire(); return getNextAvailableItem(); } public void putItem(Object x) { if (markAsUnused(x)) available.release(); } // Not a particularly efficient data structure; just for demo protected Object[] items = ... whatever kinds of items being managed protected boolean[] used = new boolean[MAX_AVAILABLE]; protected synchronized Object getNextAvailableItem() { for (int i = 0; i < MAX_AVAILABLE; ++i) { if (!used[i]) { used[i] = true; return items[i]; } } return null; // not reached } protected synchronized boolean markAsUnused(Object item) { for (int i = 0; i < MAX_AVAILABLE; ++i) { if (item == items[i]) { if (used[i]) { used[i] = false; return true; } else return false; } } return false; } }
- Semaphore (通常用于限制可以访问某些资源(物理或逻辑的)的线程数目)
- Java中的Semaphore--用于多线程中控制资源并发访问的线程数
- Java并发编程: 使用Semaphore限制资源并发访问的线程数
- 多线程Demo-Semaphore 控制同时访问资源的线程个数
- 自定义的互斥量类,可以用于线程或进程的同步
- Python 限制线程的最大数量(Semaphore)
- OMCAT中可以限制某些IP访问
- Oracle限制可以访问数据库的地址(Linux)
- JDK并发包---(7)允许多个线程同时访问的:信号量(Semaphore)
- 线程池的饱和策略-Semaphore实现任务提交限制
- 线程池的饱和策略-Semaphore实现任务提交限制
- ListView中限制选择(checkbox)数目的Adapter
- squid上限制某些ip地址访问的方法
- 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件”
- 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件”
- 取消IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件
- 解决:限制此网页运行可以访问计算机的脚本或 ActiveX 控件
- 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件”
- 通过Glib库中的GKeyFile来读取配置文件
- C++中的预编译指令
- Directory(FSDirectory与RAMDirectory同时使用,减少IO操作,提高效率)
- drupal7 在页面内调用某个位置(region)上的block
- Android中Acition和Category常量表
- Semaphore (通常用于限制可以访问某些资源(物理或逻辑的)的线程数目)
- C++ 面试宝典 - 知识点集锦
- UITableView学习总结
- BSTR、LPSTR、LPWSTR、CString、VARIANT、COleVariant 、_variant_t、CComBSTR、_bstr_t
- python logging.basicConfig不生效的原因
- Hadoop install and set up
- DevExpress ChartControl Pie 颜色设置
- HDU 4638 多校第四场1007 离线询问,树状数组||线段树维护
- UVa 694 The Collatz Sequence(序列)