【完整代码】使用Semaphore实现线程的交替执行打印 A1B2C3D4E5
2023-09-14 09:02:00 时间
import java.util.concurrent.Semaphore;
/**
使用Semaphore实现线程的交替执行打印 A1B2...
Semaphore 基于AQS(内部维护了一个队列)可以用于限流 最多允许多少线程同时运行
可以有很多个线程 但同时允许运行的线程有限制2个 new Semaphore(2)
*/
public class T11_TestSemaphore_A1B2 {
public static void main(String[] args) {
//允许一个线程同时执行
// Semaphore s = new Semaphore(1);
// 允许两个纤程同时执行
Semaphore s = new Semaphore(2);
//2 同时允许两个线程运行 true 公平与否 默认非公平
// Semaphore s = new Semaphore(2, true);
new Thread(()->{
try {
s.acquire();//获得许可 一共就2个许可
char[] chs = {'A','B','C','D','E'};
for (int i=0; i<chs.length; i++) {
System.out.println(chs[i]);
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
s.release();
}
}).start();
new Thread(()->{
try {
s.acquire();
int[] ints = {1,2,3,4,5};
for (int i=0; i<ints.length; i++) {
System.out.println(ints[i]);
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
s.release();
}
}).start();
}
}
相关文章
- 线程同步工具(七)在并发任务间交换数据
- 线程管理(十一)处理线程组内的不受控制异常
- AIX6.1 线程模型说明
- 进程和线程的区别
- python使用threading获取线程函数返回值的实现方法
- java JUC线程池:Executors.newFixedThreadPool代码示例
- 多线程之线程的执行顺序
- 关于线程的执行顺序,可能真的只是你以为的你以为
- 通过Thread Pool Executor类解析线程池执行任务的核心流程
- 为何我中断执行的线程不起作用,Why
- 线程的取消 线程的取消状态 线程取消点 验证线程被取消时 系统自动调用线程清理函数 线程的取消类型 当线程执行以下动作时会调用清理函数 线程退出清理函数 弹出清理函数
- Android:子线程向UI主线程发送消息
- [手游新项目历程]第23天-map下标访问阻塞线程
- C# 执行固定个数任务自行控制进入线程池的线程数量,多任务同时但是并发数据限定
- 【SystemVerilog 之 线程与通信】~ 线程的使用、线程的控制、线程间的通信
- 多线程之旅(9)_如何安全的取消正在执行的线程——附C#源码
- C# 中await前后执行线程的问题
- Servlet — 线程安全问题