本文共 1533 字,大约阅读时间需要 5 分钟。
可以实现流量控制,同时访问文件的用户数
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class SemaphoreTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final Semaphore sp = new Semaphore(3);//创建Semaphore信号量,初始化许可大小为3 Runnable runnable = new Runnable(){ public void run(){ try { sp.acquire();//请求获得许可,如果有可获得的许可则继续往下执行,许可数减1。否则进入阻塞状态 } catch (InterruptedException e1) { e1.printStackTrace(); } System.out.println("线程" + Thread.currentThread().getName() + "进入,当前已有" + (3-sp.availablePermits()) + "个并发"); try { Thread.sleep((long)(Math.random()*10000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程" + Thread.currentThread().getName() + "即将离开"); sp.release();//释放许可,许可数加1 //下面代码有时候执行不准确,因为其没有和上面的代码合成原子单元 System.out.println("线程" + Thread.currentThread().getName() + "已离开,当前已有" + (3-sp.availablePermits()) + "个并发"); } }; for(int i=0;i<10;i++){ service.execute(runnable); //提交十个任务 } } }
本文出自 “” 博客,请务必保留此出处
转载地址:http://wcfwl.baihongyu.com/