Java 信号量
来源:互联网 发布:阿里云盾占用80端口 编辑:程序博客网 时间:2024/05/22 13:46
信号量的使用
Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。
public class Client { public static void main(String[] args) { // 创建可缓存的线程池 ExecutorService executorService = Executors.newCachedThreadPool(); // 创建一个只能5个线程同时访问的信号量 final Semaphore semaphore = new Semaphore(5); // 开启20个线程,相当于模拟20个用户 for (int i = 0; i < 20; i++) { final int num = i; Runnable runnable = new Runnable() { @Override public void run() { try { // 阻塞函数,直到有可访问的线程,才继续运行 semaphore.acquire(); System.out.println("接受: " +num); // 让线程睡眠一定得时间 Thread.sleep((long) (Math.random()*1000)); //线程访问结束后释放当前信号量 semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }; // 线程池执行任务 executorService.execute(runnable); } // 立即退出线程池 executorService.shutdown(); }}
运行结果如下:
其中在执行semaphore.acquire()方法时,阻塞时间不同,因此前五个数据在打印时顺序不同,但之后每次都只会释放一个接受一个,故此,之后都是按顺序来排列的。
阅读全文
0 0
- java 信号量
- Java 信号量
- java 信号量
- JAVA 信号量
- JAVA--信号量
- Java 信号量
- JAVA 线程 同步 信号量
- java信号量Semaphore
- JAVA 线程 同步 信号量
- java实现信号量
- java实现信号量
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- Java信号量Semaphore 介绍
- java线程:信号量
- Java 信号量 Semaphore 介绍
- Java 信号量 Semaphore 介绍
- 23. Merge k Sorted Lists(divide and conquer)
- 单独编译工模&push替换烧写
- [PAT乙] 1007. 素数对猜想 (20)
- Android AIDL学习(二)
- Android 命令行获取apk信息
- Java 信号量
- Android 6.0 权限管理
- Android MediaPlayer播放音频与视频
- Android MimeTypeMap使用--MIME类型
- Android 横竖屏切换
- Android RecyclerView使用
- Android CoordinatorLayout使用
- Android AccessibilityService无障碍服务(一)
- Android AccessibilityService无障碍服务(二)