问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java多线程编程之连续打印abc的几种解法

发布网友 发布时间:2022-05-13 22:13

我来回答

1个回答

热心网友 时间:2023-08-16 14:05

package com.demo.test;/**
* 基于两个lock实现连续打印abcabc....
* @author lixiaoxi
* */public class TwoLockPrinter implements Runnable { // 打印次数
private static final int PRINT_COUNT = 10; // 前一个线程的打印锁
private final Object fontLock; // 本线程的打印锁
private final Object thisLock; // 打印字符
private final char printChar; public TwoLockPrinter(Object fontLock, Object thisLock, char printChar) { this.fontLock = fontLock; this.thisLock = thisLock; this.printChar = printChar;
}

@Override public void run() { // 连续打印PRINT_COUNT次
for (int i = 0; i < PRINT_COUNT; i++) { // 获取前一个线程的打印锁
synchronized (fontLock) { // 获取本线程的打印锁
synchronized (thisLock) { //打印字符 System.out.print(printChar); // 通过本线程的打印锁唤醒后面的线程
// notify和notifyall均可,因为同一时刻只有一个线程在等待 thisLock.notify();
} // 不是最后一次则通过fontLock等待被唤醒 // 必须要加判断,不然虽然能够打印10次,但10次后就会直接死锁
if(i < PRINT_COUNT - 1){ try { // 通过fontLock等待被唤醒 fontLock.wait();

} catch (InterruptedException e) {
e.printStackTrace();
}
}

}
}
} public static void main(String[] args) throws InterruptedException { // 打印A线程的锁
Object lockA = new Object(); // 打印B线程的锁
Object lockB = new Object(); // 打印C线程的锁
Object lockC = new Object();
// 打印a的线程
Thread threadA = new Thread(new TwoLockPrinter(lockC, lockA, 'A')); // 打印b的线程
Thread threadB = new Thread(new TwoLockPrinter(lockA, lockB, 'B')); // 打印c的线程
Thread threadC = new Thread(new TwoLockPrinter(lockB, lockC, 'C')); // 依次开启a b c线程 threadA.start();
Thread.sleep(100); // 确保按顺序A、B、C执行 threadB.start();
Thread.sleep(100);
threadC.start();
Thread.sleep(100);
}

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高考560分能上211大学吗? - 知乎 河北高考多少分能上211大学 河北2023高考211分数线是多少? 考560分能上211大学吗河北 刀剑英雄合王者武器多少费用 刀剑英雄帝辰王者现在什么价位 2021年度工程施工合同范本 2021承包转让简单的合同范本 2021医院食堂承包合同范本 div+css+js实现菜单的收缩与展开 调用数据库内容的时候为什么内容字段... 如何让两个线程交替运行 疯狂习题:写2个线程,其中一个线程打印1-52,另一个线程打印A-Z,打印的顺序应该是12A34B56C...5152Z。 多线程为什么我的不会交替打印 姐妹暖心句子八个有哪些? Java中主方法中有一个循环打印+这个字符,有创建了一个线程打印*这个字符,哪个会先执行? 用c#写俩线程,一个主线程,一个次线程,两个线程一起打印1~100。即是 1.用两种方式实现两个线程,一个线程负责打印1-2600,另一个线程打印A-Z,反复打印100遍 JAVA 两个线程,一个线程打印1-10,另一个线程打印1-20,线程互不抢占,轮流打印20遍 代码如何实现? 写一个程序,里面有2个线程,线程A和B都打印共享的资源变量i,从1打印到50,交替完成 c++中用两个线程交替输出 AB 就像ABABABAB这样输出 java 多线程编程 交替打印大小写字母的问题 姐妹暖心句子2020 java 实现两个线程,一个打印奇数,一个打印偶数,这两个线程并发执行 C语言 怎么让两个线程交替打印信息 1、多线程编程,两个线程,一个负责打印大写字母,一个负责打印小写字母,实现大小写字母交替打印。 关于java 两个线程轮换打印1-10的问题 JAVA双线程 用两个线程交替打印从1到100。 如:线程1 1 线程2 2 java多线程问题。两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。 由于昨天买了基金,现在有些后怕,网上看到都说赔死了,有这么恐怖不? 基金定投诺安平衡比较好还是融通巨潮100好? 短跑怎么跑的更快 宝玉石鉴定与加工专业真的不能升本吗? 珠宝玉石加工与营销就业前景怎么样?毕业之后能干嘛 天津宝玉石专业专升本 我是宝玉石鉴定与加工大专毕业学生,可以报读其他专业本科吗? 安徽工业经济职业技术学院的宝玉石鉴定与加工专业是否可以专升本 宝玉石鉴定与销售专科毕业可以参加成人高考吗 黎明职业大学宝玉石鉴定与加工可以专升本吗? 学宝玉石鉴定的专科生能专升本进中国地质大学宝石学吗?急求,,,,,,, 请问宝玉石鉴定与加工怎么样,大专出来有前途吗 珠宝玉石鉴定专业有专升本和考研吗 首饰设计与工艺专升本考什么 广西有什么珠宝设计类的专升本学校么? 学珠宝的能专升本到相关本科么? 长春工程学院专升本珠宝玉石专业 宝玉石鉴定与加工毕业后需要什么样的工作 郑州信息科技职业学院 宝玉石鉴定与加工这个专业升本专业是什么 考研可以考什么专业? 女生学宝玉石鉴定与加工技术专业好就业吗? 如果你的爱豆出柜了,你会选择接受吗? 为什么自己的同学喜欢自己的爱豆会生气?