菜鸟的一个学习笔记,欢迎大神 批评指正。
Java多线程相关知识【37】–并发包用法–Semaphore
1.信号量
如何保证多个线程在竞争一个资源时的不出错的情况。
2.相关方法
1.构造函数
Semaphore(int permits);//信号量初始化
Semaphore(int permits, boolean fair);// 信号量初始化,并尽可能保证公平
2.相关方法
返回类型 | 方法 | 说明 |
---|---|---|
void | acquire() | 获取一个信号量 |
void | acquire(int permits) | 获取定义个信号量 |
void | acquireUninterruptibly() | 忽略一个中断的异常 |
void | acquireUninterruptibly(int permits) | 忽略多个个中断的异常 |
int | availablePermits() | 当前可用个数 |
int | drainPermits() | 获取到所有的许可证 |
protected Collection | getQueuedThreads() | 继承后,可获取当前使用的正在等待的线程 |
int | getQueueLength() | 当前被休眠的进程个数 |
boolean | hasQueuedThreads() | 是否有线程在此信号量中 |
boolean | isFair() | 是否公平状态 |
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) | 尝试获取一个信号量,并设置等待的时间 |