构造方法:
//permits 定义信号量数量
public Semaphore(int permits) {
//非公平锁 默认
sync = new NonfairSync(permits);
}
//permits 定义信号量数量, fair 定义公平、非公平锁
public Semaphore(int permits, boolean fair) {
sync = fair ? new FairSync(permits) : new NonfairSync(permits);
}
使用
public class SemaphoreTest {
private static final Logger log = LoggerFactory.getLogger(SemaphoreTest.class);
private static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 20, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
public static void main(String[] args) throws ExecutionException, InterruptedException {
test();
}
private static void test() throws ExecutionException, InterruptedException {
//每次只可以有2个线程执行
Semaphore semaphore = new Semaphore(2);
for (int i = 0; i < 5; i++) {
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
try {
//获取
semaphore.acquire();
log.info("{}开始执行", Thread.currentThread().getName());
Thread.sleep(5000);
log.info("{}执行结束", Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//释放
semaphore.release();
}
}
});
threadPoolExecutor.shutdown();
}
}