Semaphore可以控制并发访问的线程个数

public class   SemaphoreTest {

    //信号量,只允许 3个线程同时访问
    private static Semaphore semaphore = new Semaphore(3);

    public static void main(String[] args) {

        ExecutorService executorService = Executors.newCachedThreadPool();


        for (int i = 0; i < 10; i++) {
            final int num = i;
            executorService.submit(new Runnable() {
                @Override
                public void run() {
                    showLog(num);
                }
            });
        }

        executorService.shutdown();
    }


    private static   void showLog(int num) {
        //获取许可
        try {
            semaphore.acquire();
            //执行
            System.out.println("Accessing: " + num);
            Thread.sleep(2000); //休眠2秒

        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally {
            //释放
            semaphore.release();
            System.out.println("Release..." + num);
        }


    }

}
原文地址:https://www.cnblogs.com/moris5013/p/11880465.html