java多线程之Concurrent.Utils常用类Semaphore详解

Posted xy-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多线程之Concurrent.Utils常用类Semaphore详解相关的知识,希望对你有一定的参考价值。

 

 

 

 

 

 

技术分享图片

技术分享图片

代码示例:

public class UseSemaphore {  
  
    public static void main(String[] args) {  
        // 线程池  
        ExecutorService exec = Executors.newCachedThreadPool();  
        // 只能5个线程同时访问  
        final Semaphore semp = new Semaphore(5);  
        // 模拟20个客户端访问  
        for (int index = 0; index < 20; index++) {  
            final int NO = index;  
            Runnable run = new Runnable() {  
                public void run() {  
                    try {  
                        // 获取许可  同时只有5个线程进入执行
                        semp.acquire();  
                        System.out.println("Accessing: " + NO);  
                        //模拟实际业务逻辑
                        Thread.sleep((long) (Math.random() * 10000));  
                        // 访问完后,释放  
                        semp.release();  
                    } catch (InterruptedException e) {  
                    }  
                }  
            };  
            exec.execute(run);  
        } 
        
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //System.out.println(semp.getQueueLength());
        // 退出线程池  
        exec.shutdown();  
    }  
}  

以上是关于java多线程之Concurrent.Utils常用类Semaphore详解的主要内容,如果未能解决你的问题,请参考以下文章

多线程之内存模型

Java多线程之三volatile与等待通知机制示例

敲黑板!Java多线程常见面试题!!

Java多线程常见面试题

华为面试官问我关于“多线程之内存模型”,看完这篇,自信满满!

Java多线程常见面试题-第三节:线程安全集合类和死锁