cn.hutool.core.thread.SemaphoreRunnable Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hutool-all Show documentation
Show all versions of hutool-all Show documentation
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。
package cn.hutool.core.thread;
import java.util.concurrent.Semaphore;
/**
* 带有信号量控制的{@link Runnable} 接口抽象实现
*
*
* 通过设置信号量,可以限制可以访问某些资源(物理或逻辑的)线程数目。
* 例如:设置信号量为2,表示最多有两个线程可以同时执行方法逻辑,其余线程等待,直到此线程逻辑执行完毕
*
*
* @author looly
* @since 4.4.5
*/
public class SemaphoreRunnable implements Runnable {
/** 实际执行的逻辑 */
private final Runnable runnable;
/** 信号量 */
private final Semaphore semaphore;
/**
* 构造
*
* @param runnable 实际执行的线程逻辑
* @param semaphore 信号量,多个线程必须共享同一信号量
*/
public SemaphoreRunnable(Runnable runnable, Semaphore semaphore) {
this.runnable = runnable;
this.semaphore = semaphore;
}
/**
* 获得信号量
*
* @return {@link Semaphore}
* @since 5.3.6
*/
public Semaphore getSemaphore(){
return this.semaphore;
}
@Override
public void run() {
if (null != this.semaphore) {
try{
semaphore.acquire();
try {
this.runnable.run();
} finally {
semaphore.release();
}
}catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy