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详解的主要内容,如果未能解决你的问题,请参考以下文章