采用java信号量(semaphore)让线程轮流打印
semaphore是java.util.concurrent包下的并发工具类。
A counting semaphore. Conceptually, a semaphore maintains a set of permits. Each acquire() blocks if necessary until a permit is available, and then takes it. Each release() adds a permit, potentially releasing a blocking acquirer. However, no actual permit objects are used; the semaphore just keeps a count of the number available and acts accordingly.Semaphores are often used to restrict the number of threads than can access some (physical or logical) resource.
大致意思是semaphore可以持有许可证,可以在初始化时指定,执行一次acquire(),获取一个许可证,线程进入,当许可证为0,则不再允许线程进入,执行一次release释放一个许可证。
package com.smikevon.concurrent.tools;import java.util.Random; import java.util.concurrent.Semaphore;/*** @description: 有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C.要求, 同时启动三个线程, 按顺序输出ABC, 循环10次* @date : 2014年9月17日 下午8:23:05*/ public class TestSemaphore {public static void main(String[] args) {final Semaphore sa = new Semaphore(1);final Semaphore sb = new Semaphore(0);final Semaphore sc = new Semaphore(0);final Random random = new Random(System.currentTimeMillis());new Thread(new Runnable() {public void run() {try {while(true){Thread.sleep(random.nextInt(3000));sa.acquire();doing("A");sb.release();}} catch (InterruptedException e) {e.printStackTrace();}}},"线程a").start();new Thread(new Runnable() {public void run() {try {while(true){Thread.sleep(random.nextInt(3000));sb.acquire();doing("B");sc.release();}} catch (InterruptedException e) {e.printStackTrace();}}},"线程b").start();new Thread(new Runnable() {public void run() {try {while(true){Thread.sleep(random.nextInt(3000));sc.acquire();doing("C");sa.release();}} catch (InterruptedException e) {e.printStackTrace();}}},"线程c").start();}/*** @Description:打印出线程的名字* @param msg* @returType:void*/public static void doing(String msg){System.out.println(Thread.currentThread().getName()+":"+msg);}}
转载于:https://www.cnblogs.com/seanvon/p/4072050.html
采用java信号量(semaphore)让线程轮流打印相关推荐
- java多线程交替打印_使用Java实现三个线程交替打印0-74
使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...
- java 信号量Semaphore
在很多情况下,可能有多个线程需要访问数目很少的资源.假想在服务器上运行着若干个回答客户端请求的线程.这些线程需要连接到同一数据库,但任一时刻 只能获得一定数目的数据库连接.你要怎样才能够有效地将这些固 ...
- java 线程交替输出,[java]java经典问题之线程交替打印数字
问题 给出两个线程,要求两个线程交替打印从1到100,例如:A线程打印1,B线程打印2,A线程打印3...依次类推,直到打印到100 思路 这里主要是考察对java中wait/notifyAll机制的 ...
- java实现123n_java三线程交替打印123……n
使用多线程交替打印1--n,a进程打印1,4,7,--(3n+1),b进程打印2,7,10,--(3n+2),c进程打印3,6,9,--(3n) 涉及到多线程的同步,阻塞,wait,notify 代码 ...
- java中用两个线程交替打印0-100偶数和奇数
1.第一种方式,用 synchronized 关键字来实现 public class ThreadDemo {static int count = 0;static Object lock = new ...
- 关于线程轮流打印0-99
使用Reentrantlock实现 package com.wang;import java.util.concurrent.locks.Condition; import java.util.con ...
- java go多线程:两个线程交替打印 0~100 的奇偶数
最近在实现raft算法,用到了很多go的高并发的知识,看到一道题写两个线程交替打印 1~100 的奇偶数,突然来了兴趣. 题目要求我们要启动两个线程,一个打印奇数,一个打印偶数.中途不能跳出协程. 代 ...
- Java Semaphore实现线程池任务调度
2019独角兽企业重金招聘Python工程师标准>>> 关于Semaphore举例 以一个停车场运作为例.为了简单起见,假设停车场只有三个车位,一开始三个车位都是空的.这时如果同时来 ...
- Java Review - 并发编程_ 信号量Semaphore原理源码剖析
文章目录 概述 小Demo 类关系概述 核心方法源码解读 void acquire() 非公平策略NonfairSync类的`tryAcquireShared`方法 公平策略`FairSync`类的` ...
最新文章
- BestCoder-Round#38
- 25岁,在一个需要工作的周末……
- 变量之--列表初始化和结构化绑定
- hibernate中报错could not initialize proxy - no Session的解决方法
- 前端学习(1407):多人管理27代码优化
- oracle身份管理器,分析Oracle身份管理器的各个元素(下)
- LoRa、LoRaWAN及网关相关技术介绍
- “土豪机”8848出新品 手机数据备份保险箱1699起
- LeetCode(897)——递增顺序查找树(JavaScript)
- Spring的AOP特性
- 男单巅峰战林丹力克索尼 再度封王成功卫冕
- app闪退后重启_安卓APP崩溃(crash)后重新启动,捕获全局异常重启APP
- MFC浮动窗口使用方法和注意事项
- android虚拟机模糊,Android studio虚拟机在启动界面和桌面出现画面模糊花屏问题的解决方法...
- 图片涂改了怎么给复原_图片马赛克怎么去掉 怎么去除马赛克方法介绍
- 超级浏览器究竟是什么?
- 拖动或点击CMD窗口造成程序阻塞,在bat文件中关闭cmd窗口的快速编辑模式
- 福禄克FLUKE OptiFiber Pro HDR OTDR光时域反射(OTDR)测试仪OFP2-100-S
- 如何将已有项目导入SVN
- “已取消到该网页的导航” chm文件无法显示错误 解决方法