All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.hutool.core.thread.SemaphoreRunnable Maven / Gradle / Ivy

Go to download

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

There is a newer version: 5.8.34
Show newest version
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