package com.supr; import java.util.concurrent.Semaphore; public class Four { public static void main(String[] args) { final Semaphore s = new Semaphore(3); for (int i = 0; i < 20; i++) { Thread t = new Thread(new Runnable() { @Override public void run() { try { s.acquire(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "获取到凭证开始执行.."); System.out.println("当前有"+(3-s.availablePermits())+"个线程并发..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "凭证执行完毕,释放凭证.."); s.release(); } }); t.start(); } } }
Thread-0获取到凭证开始执行.. 当前有1个线程并发... Thread-1获取到凭证开始执行.. 当前有2个线程并发... Thread-2获取到凭证开始执行.. 当前有3个线程并发... Thread-0凭证执行完毕,释放凭证.. Thread-3获取到凭证开始执行.. 当前有3个线程并发... Thread-1凭证执行完毕,释放凭证.. Thread-4获取到凭证开始执行.. 当前有3个线程并发... Thread-2凭证执行完毕,释放凭证.. Thread-5获取到凭证开始执行.. 当前有3个线程并发... Thread-3凭证执行完毕,释放凭证.. Thread-6获取到凭证开始执行.. 当前有3个线程并发... Thread-4凭证执行完毕,释放凭证.. Thread-7获取到凭证开始执行.. 当前有3个线程并发... Thread-5凭证执行完毕,释放凭证.. Thread-8获取到凭证开始执行.. 当前有3个线程并发... Thread-6凭证执行完毕,释放凭证.. Thread-9获取到凭证开始执行.. 当前有3个线程并发... Thread-7凭证执行完毕,释放凭证.. Thread-10获取到凭证开始执行.. Thread-8凭证执行完毕,释放凭证.. 当前有3个线程并发... Thread-11获取到凭证开始执行.. 当前有3个线程并发... Thread-9凭证执行完毕,释放凭证.. Thread-12获取到凭证开始执行.. 当前有3个线程并发... Thread-10凭证执行完毕,释放凭证.. Thread-13获取到凭证开始执行.. 当前有3个线程并发... Thread-11凭证执行完毕,释放凭证.. Thread-14获取到凭证开始执行.. 当前有3个线程并发... Thread-12凭证执行完毕,释放凭证.. Thread-15获取到凭证开始执行.. 当前有3个线程并发... Thread-13凭证执行完毕,释放凭证.. Thread-16获取到凭证开始执行.. 当前有3个线程并发... Thread-14凭证执行完毕,释放凭证.. Thread-17获取到凭证开始执行.. 当前有3个线程并发... Thread-15凭证执行完毕,释放凭证.. Thread-18获取到凭证开始执行.. 当前有3个线程并发... Thread-16凭证执行完毕,释放凭证.. Thread-17凭证执行完毕,释放凭证.. Thread-19获取到凭证开始执行.. 当前有2个线程并发... Thread-18凭证执行完毕,释放凭证.. Thread-19凭证执行完毕,释放凭证..
Semaphore:一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire()
,然后再获取该许可。每个 release()
添加一个许可,从而可能释放一个正在阻塞的获取者。
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。
说白了,Semaphore是一个计数器,在计数器不为0的时候对线程就放行,一旦达到0,那么所有请求资源的新线程都会被阻塞,包括增加请求到许可的线 程,也就是说Semaphore不是可重入的。每一次请求一个许可都会导致计数器减少1,同样每次释放一个许可都会导致计数器增加1,一旦达到了0,新的 许可请求线程将被挂起。
参考:http://www.blogjava.net/xylz/archive/2010/07/13/326021.html
http://blog.csdn.net/java2000_net/article/details/3997449
http://blog.163.com/maravilla_evol/blog/static/1395646992011912113635724/
http://blog.163.com/liu_sheng_han/blog/static/19059137220128240150242/
相关推荐
Semaphore的使用及其方法的使用。
semaphore完整搭建方案,包括帮助文档、程序源码、可执行程序。按照帮助文档完整搭建可视化ansible部署解决方案
这篇文章主要介绍了python线程信号量semaphore使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.semaphore信号量原理 多线程同时运行,能提高程序的...
自己用Semaphore制作的最简单的,1生产者,1消费者,多缓冲区的模型...于VC下通过..
关于Android变成中的信号量semaphore,在使用过程中我们往往搞不清楚其信号量的申请和使用。这里主要针对信号量初始值为零的情况做介绍,其他情况不做讨论。初始值为零的情况较少使用,部分代码中的这个情况往往让...
Linux 下多线程编程-Pthread 与 Semaphore 的使用 Linux 下的多线程编程是通过使用 POSIX 线程接口,称为 pthread 实现的。要编写 Linux 下的多线程程序,需要使用头文件 pthread.h,连接时需要使用库 libpthread.a...
Python3高级核心技术97讲-进程和- Semaphore 使用以.mp4
Semaphore:可理解为允许线程执行信号的池子,池子中放入多少个信号就允许多少线程同时执行。 private static void MultiThreadSynergicWithSemaphore() { //0表示创建Semaphore时,拥有可用信号量数值 //1表示...
使用信号量(Semaphore)实现线程的同步
semaphore开发源码,ansible可视化部署服务程序,支持界面操作。
Semaphore 源码解析 通过使用Semaphore可以在高并发场景进行限流控制处理
Semaphore T-BOX System OverviewPDF,Semaphore T-BOX System Overview
mutex和semaphore互斥程序实例
Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有...
C#语言Semaphore类用法实例,多线程 用于有多个同类型共享资源(比如端口)时,如何协调端口分配给线程访问资源的问题,是一个简单模拟实例(源代码)。
Football_using_semaphore 使用信号量和共享内存模拟足球比赛
Semaphore的初步使用 Semaphore是什么,能做什么? Semaphore 是 synchronized 的加强版,作用是控制线程的并发数量。就这一点而言,单纯的synchronized 关键字是实现不了的。 直接看例子吧,这个例子包含3个类,一...
semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用
Semaphore_TBOX_产品-软件及系统功能