Semaphore(信号量),字面上意思就是控制线程流量,当我们想要控制线程连接数的时候就可以使用,创建多少个线程不重要,重要的是Semaphore可以控制多少个才可以在同一时间同时执行.
public class SemaPhoreTest { // 线程池的阀值 private static final int THREAD_COUNT = 30; // 使用线程池Excutors框架获取到简单线程池 private static ExecutorService threadPool = Executors.newFixedThreadPool(THREAD_COUNT); // ******控制流量控制,只允许10个线程同时运行******* private static Semaphore s = new Semaphore(10); public static void main(String[] args) { for (int i = 0; i < THREAD_COUNT; i++) { threadPool.execute(new Runnable() { @Override public void run() { try { // 通过一个 s.acquire(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("process is running!!!"); } }); } for (int i = 0; i < THREAD_COUNT; i++) { try { // 模拟耗时操作 TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } // 执行完之后释放一个,下一个线程可以运行 s.release(); } threadPool.shutdown(); } }