Condition控制线程通信:java三个线程循环打印ABC
时间:2022-04-29
本文章向大家介绍Condition控制线程通信:java三个线程循环打印ABC,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
private Lock lock = new ReentrantLock();
private Condition c1 = lock.newCondition();
private Condition c2 = lock.newCondition();
private Condition c3 = lock.newCondition();
private int remark = 1;//
public static void main(String[] args) throws InterruptedException {
final ConditionTest test = new ConditionTest();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
test.printA();
}
}
}, "A").start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
test.printB();
}
}
}, "B").start();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
test.printC();
}
}
}, "C").start();
}
public void printA() {
lock.lock();
if (remark != 1) {
try {
c1.await();
} catch (InterruptedException e) {
}
}
remark = 2;
c2.signalAll();//依次唤醒下一个需要打印的线程
System.out.print(Thread.currentThread().getName());
lock.unlock();
}
public void printB() {
lock.lock();
if (remark != 2) {
try {
c2.await();
} catch (InterruptedException e) {
}
}
remark = 3;
c3.signalAll();
System.out.print(Thread.currentThread().getName());
lock.unlock();
}
public void printC() {
lock.lock();
if (remark != 3) {
try {
c3.await();
} catch (InterruptedException e) {
}
}
remark = 1;
c1.signalAll();
System.out.print(Thread.currentThread().getName() + "t");
lock.unlock();
}
- 8张图理解Java
- C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
- 解决Sublime在LinuxMint下无法输入中文的问题
- 使用Redis做MyBatis的二级缓存
- C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
- windows添加静态路由
- C++继承与派生(原理归纳)
- Linux下如何查看自己的服务器有没有无线网卡
- WAMP配置虚拟主机
- linux开关端口问题
- Python 3.6实现单博主微博文本、图片及热评爬取
- 用Django实现一个可运行的区块链应用
- Python的dict实现原理及与Java的比较探究
- 关于位域如何节省内存(C++)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释