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应用实例相关推荐

  1. 彻底理解Java并发:Java并发工具类

    本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...

  2. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  3. Java并发工具类(三)Exchanger

    Java并发工具类(三)Exchanger 在J.U.C并发包中提供了一些工具类,可以供我们在日常的开发中,根据不同的情况去进行一些相关的并发控制,具体的类有: CountDownLatch Sema ...

  4. Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser

    本文目录: 1.CountDownLatch(闭锁) 1.CountDownLatch 例子 2.CyclicBarrier(循环栅栏) 1.CyclicBarrier 例子 2.CountDownL ...

  5. Java高并发编程(十):Java并发工具类

    1. 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. 1.1 应用场景 假如有这样一个需求:我们需要解析一个Excel里多个shee ...

  6. java semaphore 等待时间_一个java同步工具类Semaphore的详解

    Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了.这篇文章将对Semaphore的概念和使用进行一个详解. 一.概念理解 官方是这样 ...

  7. Java并发工具类(4):Exchanger相关介绍

    Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法交换数 ...

  8. Java JUC工具类--Semaphore

    Semaphore 在Semaphore信号量非常适合高并发访问限制,新系统在上线之前,要对系统的访问量进行评估,评估是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评估 当然评估标准 ...

  9. Java并发工具类-循环屏障CyclicBarrier

    CyclicBarrier简介 CyclicBarrier API 构造方法 await方法 reset方法 使用样例 CyclicBarrier源码详解 CyclicBarrier中属性 构造方法及 ...

最新文章

  1. SpringMVC-学习笔记04【SpringMVC返回值类型及响应数据类型】
  2. 51Nod 蜥蜴和地下室(搜索)
  3. NGUI EventDelagate事件委托
  4. Django框架——模型(数据库操作)
  5. Java分布式唯一ID生成方案——比UUID效率更高的生成id工具类
  6. Andriod Studio两种签名机制V1和V2的区别
  7. code回归采访哭 ladies_南太铉直播下跪?星船新男团?Mina归队?Kingdom来了?itzy回归?...
  8. [SHOI2008]小约翰的游戏John
  9. Colorful SegmentedControl
  10. linspace函数matlab_MATLAB用不同颜色绘制多条曲线
  11. Web前端开发工具和框架
  12. MySQL函数大全及用法
  13. LabVIEW编程LabVIEW控制GPS例程与相关资料
  14. Codeforces 950C-Zebras(模拟构造)
  15. 计算机课程进制的转换,计算机课程设计 进制转换
  16. pytorch计算FLOPs
  17. The Wheel Strategy
  18. leetcode387题解
  19. Idea中诡异的错误——文件为灰色并显示一个橙色时钟图标
  20. [转载]创业者的N种死法

热门文章

  1. Docker Remote API v1.12使用
  2. 打开SQL Developer时,提示缺少快捷方式
  3. 设计模式系列3-----C++实现命令模式(Command Pattern)
  4. Delphi 2009 中 TStrings 与 TStream 的增强
  5. verilog 里面,always,assign和always@(*)区别
  6. 脑细胞膜等效神经网路训练代码
  7. 华为机试第10题python
  8. dearpygui-0.6.6 以前的蛇变成了这个样子
  9. 专访闪送联合创始人于红建:要继续深耕国内市场
  10. c#中不同类中变量的引用方法