Semaphore 信号量 控制进程

来源:互联网 发布:linux内网穿透知乎 编辑:程序博客网 时间:2024/06/18 09:27
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;/** * Semaphore 信号量主要在多线程环境下 控制进程 * @author admin * */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{                        semp.acquire();//获取许可                        System.out.println("Accessing" + NO);                        //模拟实际业务逻辑                        Thread.sleep((long)(Math.random()*1000));                        //访问完成 释放                        semp.release();                    }catch(Exception e){                        e.printStackTrace();                    }                }            };            exec.execute(run);                  }        try{            Thread.sleep(10);        }catch(Exception e){            e.printStackTrace();        }        //退出线程池        exec.shutdown();    }}
原创粉丝点击