package com.basic; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; /** * @program JavaBooks * @description: Semaphoreä¾å * @author: mf * @create: 2020/01/09 15:35 */ public class T32 { // 请æ±çæ°é private static final int threadCount = 20; public static void main(String[] args) { ExecutorService service = Executors.newFixedThreadPool(10); // 䏿¬¡åªè½å 许æ§è¡ççº¿ç¨æ°é final Semaphore semaphore = new Semaphore(5); for (int i = 0; i < threadCount; i++) { final int threadNum = i; service.execute(() -> { try { semaphore.acquire(); // è·åä¸ä¸ªè®¸å¯ï¼æä»¥å¯è¿è¡çº¿ç¨æ°é为5/1=5 Thread.sleep(1000); System.out.println("threadNum: " + threadNum); Thread.sleep(1000); semaphore.release(); // éæ¾ä¸ä¸ªè®¸å¯ } catch (InterruptedException e) { e.printStackTrace(); } }); } service.shutdown(); System.out.println("finish..."); } }