24.Semaphore
Semaphore
在进程方面完成信号线的控制,可以控制某个资源下,可被同时访问的线程个数。对系统的访问量进行评估,信号量维护了一个许可集;在许可前会阻塞每一个 semaphore.acquire() ,然后再获取该许可,每一个release() 添加一个许可,从而
可能释放一个正在阻塞的获取者,但是,不使用实际的许可对象,Semaphore只对可用许可的号码进去计算,并采取行动,拿到信号量的线程则进入代码,否则就等待。
semaphore.acquire();//1.获取许可semaphore.release();//3.访问完毕,释放
package demo1;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class DemoSemaphore {public static void main(String[] args) {ExecutorService executorService = Executors.newCachedThreadPool();Semaphore semaphore = new Semaphore(3);for (int i=0;i<=20;i++){final int no =i;Runnable runnable = new Runnable() {@Overridepublic void run() {try {semaphore.acquire();//1.获取许可System.err.println("systme:"+no);Thread.sleep((long) (Math.random()*1000));//2.模拟业务耗时semaphore.release();//3.访问完毕,释放 ,如果屏蔽下面的语句,则在控制台只能打印5条记录,之后线程一直阻塞} catch (InterruptedException e) {e.printStackTrace();}finally {System.err.println("。。。");}}};executorService.execute(runnable);}executorService.shutdown();}}- 输出:
- systme:0
systme:1
systme:2
。。。
systme:3
。。。
systme:4
。。。
systme:5
。。。
systme:6
。。。
systme:7
。。。
systme:8
。。。
systme:9
。。。
systme:10
。。。
systme:11
。。。
systme:12
。。。
systme:13
。。。
systme:14
。。。
systme:15
。。。
systme:16
。。。
systme:17
。。。
systme:18
。。。
systme:19
。。。
systme:20
。。。
。。。
。。。
24.Semaphore的更多相关文章
- AQS源码深入分析之共享模式-你知道为什么AQS中要有PROPAGATE这个状态吗?
本文基于JDK-8u261源码分析 本篇文章为AQS系列文的第二篇,前文请看:[传送门] 第一篇:AQS源码深入分析之独占模式-ReentrantLock锁特性详解 1 Semaphore概览 共享模 ...
- CountDownLatch、CyclicBarrier和Semaphore
转载:http://www.cnblogs.com/dolphin0520/p/3920397.html 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDown ...
- 线程间同步之 semaphore(信号量)
原文地址:http://www.cnblogs.com/yuqilin/archive/2011/10/16/2214429.html semaphore 可用于进程间同步也可用于同一个进程间的线程同 ...
- Oracle Semaphore Management in UNIX Administration
Oracle UNIX/Linux Tips by Burleson Consulting Semaphores and Oracle 11g 信号量和数据库 Semaphores are data ...
- 我的Python成长之路---第八天---Python基础(24)---2016年3月5日(晴)
多线程编程 什么是多线程,线程是操作系统能够进行运算调度的最小单位.他包含在进程之中,是进程中的实际运作单位.线程是进程中一个单顺序的空值六,一个进程可以并发多个线程,每个线程可以并行处理不同的任务. ...
- 多线程工具类:CountDownLatch、CyclicBarrier、Semaphore、LockSupport
◆CountDownLatch◆ 假如有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以.比如你想要买套房子,但是呢你现在手上没有钱.你得等这个月工资发了.然后年终奖发了.然后朋友借你得钱 ...
- Thread.join(), CountDownLatch、CyclicBarrier和 Semaphore区别,联系及应用
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法, 由于 ...
- 并发编程(七)——AbstractQueuedSynchronizer 之 CountDownLatch、CyclicBarrier、Semaphore 源码分析
这篇,我们的关注点是 AQS 最后的部分,共享模式的使用.本文先用 CountDownLatch 将共享模式说清楚,然后顺着把其他 AQS 相关的类 CyclicBarrier.Semaphore 的 ...
- 信号量(Semaphore)
在python的多线程体系中,一共有4种锁: 同步锁(互斥锁):Lock: 递归锁:RLock: 信号量:Semaphore: 同步条件锁:Condition. 信号量(semaphore)是一种可以 ...
随机推荐
- Picasso:开启大前端的未来
“道生一,一生二,二生三,三生万物.” —— <道德经> Picasso是大众点评移动研发团队自研的高性能跨平台动态化框架,经过两年多的孕育和发展,目前在美团多个事业群已经实现了大规模的应 ...
- merge into issue
ORA-30926: unable to get a stable set of rows in the source tables 一.经检查,这个错误是由于数据来源表(即语句中,using后面的f ...
- rabbit:Mnesia could not connect to any nodes
环境: rabbitmq集群 2台机器,挂了一台后重启服务,发现在服务启动不了错误如下: 这里rabbit连接不商rabbit02这里这个服务也无法启动 解决办法: rabbitmq默认的数据库位 ...
- Winform 串口通讯之地磅
继上次的读卡之后,要做一个地磅的读取. 下面是我在读卡Demo上改的读取地磅的. 地磅是一直向串口发送数据的,所以需要截取数据来一直判断数据是否合法,然后计算出结果. 其中遇到了一个小问题,文末有介绍 ...
- 【WIN10】VisualStateManager使用說明
Demo下載:http://yunpan.cn/cFjgPtWRHKH9H 访问密码 c4b7 顧名思義,視圖狀態管理器. 在WPF中,它的功能似乎更強大.在UWP中,閹割了GotElementSt ...
- 【二分】【预处理】zoj4029 Now Loading!!!
题意:给定一个序列,多次询问 将a数组从小到大排序,下面那个值只有不超过32种,于是预处理f[i][j],表示分母为i时,aj/i的前缀和是多少. 然后对于一个给定的p,一定将分母划分成了一些连续的段 ...
- 【POJ】2796:Feel Good【单调栈】
Feel Good Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18449 Accepted: 5125 Case T ...
- Codeforces Round #294 (Div. 2)C - A and B and Team Training 水题
C. A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input ...
- PHP self与static区别
this,static和self. self和this还是很好区分的,可是self和static就很糊涂了,两者都能调用静态的方法和属性,看似使用上没有什么太大的分别,但是实际上分别很大,先来看下面这 ...
- Java_tomcat thread dump 分析
前言 Java Thread Dump 是一个非常有用的应用诊断工具, 通过thread dump出来的信息, 可以定位到你需要了解的线程, 以及这个线程的调用栈. 如果配合linux的top命令, ...