Java并发工具类Semaphore应用实例
1 package com.thread.test.thread; 2 3 import java.util.Random; 4 import java.util.concurrent.*; 5 6 /** 7 * Semaphore 8 * Semaphore维护者一组权限,无实体权限,只是一组代表权限的数字, 9 * 每一次执行acquire都会被阻塞,直到获取获取权限, 10 * 每一次执行release都会释放权限,唤醒阻塞acquire线程 11 * 12 * Semaphore通常应用于限制资源访问 13 * 14 * 15 * Created by windwant on 2016/5/27. 16 */ 17 public class MySemaphore { 18 19 public static void main(String[] args) { 20 Semaphore sp = new Semaphore(5, true); //公平性 构造函数 true 21 ExecutorService es = Executors.newCachedThreadPool(); 22 Random r = new Random(); 23 for (int i = 0; i < 10; i++){ 24 es.execute(new Needer(sp, r.nextInt(10), "needer" + i)); 25 } 26 es.shutdown(); 27 } 28 } 29 30 class Needer implements Runnable{ 31 32 private Semaphore sp; 33 34 private int seconds; 35 36 private String neederName; 37 38 Needer(Semaphore sp, int seconds, String neederName){ 39 this.sp = sp; 40 this.seconds = seconds; 41 this.neederName = neederName; 42 } 43 44 public void run() { 45 try{ 46 sp.acquire(); 47 System.out.println("needer " + neederName + " begin, need time: " + seconds + "s"); 48 long b = System.currentTimeMillis(); 49 for (int i = 0; i < seconds; i++) { 50 Thread.sleep(1000); 51 System.out.println("needer: " + neederName + "============" + i + "============"); 52 } 53 long d = System.currentTimeMillis() - b; 54 System.out.println("needer " + neederName + " over, executing time: " + TimeUnit.SECONDS.convert(d, TimeUnit.MILLISECONDS)); 55 sp.release(); 56 } catch (InterruptedException e) { 57 e.printStackTrace(); 58 } 59 } 60 }
项目地址:https://github.com/windwant/windwant-demo/tree/master/thread-demo
转载于:https://www.cnblogs.com/niejunlei/p/5985349.html
Java并发工具类Semaphore应用实例相关推荐
- 彻底理解Java并发:Java并发工具类
本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...
- Java并发工具类(闭锁CountDownLatch)
并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...
- Java并发工具类(三)Exchanger
Java并发工具类(三)Exchanger 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Sema ...
- Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser
本文目录: 1.CountDownLatch(闭锁) 1.CountDownLatch 例子 2.CyclicBarrier(循环栅栏) 1.CyclicBarrier 例子 2.CountDownL ...
- Java高并发编程(十):Java并发工具类
1. 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 1.1 应用场景 假如有这样一个需求:我们需要解析一个Excel里多个shee ...
- java semaphore 等待时间_一个java同步工具类Semaphore的详解
Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了.这篇文章将对Semaphore的概念和使用进行一个详解. 一.概念理解 官方是这样 ...
- Java并发工具类(4):Exchanger相关介绍
Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法交换数 ...
- Java JUC工具类--Semaphore
Semaphore 在Semaphore信号量非常适合高并发访问限制,新系统在上线之前,要对系统的访问量进行评估,评估是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评估 当然评估标准 ...
- Java并发工具类-循环屏障CyclicBarrier
CyclicBarrier简介 CyclicBarrier API 构造方法 await方法 reset方法 使用样例 CyclicBarrier源码详解 CyclicBarrier中属性 构造方法及 ...
最新文章
- SpringMVC-学习笔记04【SpringMVC返回值类型及响应数据类型】
- 51Nod 蜥蜴和地下室(搜索)
- NGUI EventDelagate事件委托
- Django框架——模型(数据库操作)
- Java分布式唯一ID生成方案——比UUID效率更高的生成id工具类
- Andriod Studio两种签名机制V1和V2的区别
- code回归采访哭 ladies_南太铉直播下跪?星船新男团?Mina归队?Kingdom来了?itzy回归?...
- [SHOI2008]小约翰的游戏John
- Colorful SegmentedControl
- linspace函数matlab_MATLAB用不同颜色绘制多条曲线
- Web前端开发工具和框架
- MySQL函数大全及用法
- LabVIEW编程LabVIEW控制GPS例程与相关资料
- Codeforces 950C-Zebras(模拟构造)
- 计算机课程进制的转换,计算机课程设计 进制转换
- pytorch计算FLOPs
- The Wheel Strategy
- leetcode387题解
- Idea中诡异的错误——文件为灰色并显示一个橙色时钟图标
- [转载]创业者的N种死法
热门文章
- Docker Remote API v1.12使用
- 打开SQL Developer时,提示缺少快捷方式
- 设计模式系列3-----C++实现命令模式(Command Pattern)
- Delphi 2009 中 TStrings 与 TStream 的增强
- verilog 里面,always,assign和always@(*)区别
- 脑细胞膜等效神经网路训练代码
- 华为机试第10题python
- dearpygui-0.6.6 以前的蛇变成了这个样子
- 专访闪送联合创始人于红建:要继续深耕国内市场
- c#中不同类中变量的引用方法