java实现3个线程轮流打印A、B、C,达到“ABBCCCAAAABBBBBCCCCCC”,打印200个字符停止,并在控制台打印出A、B、C各打印了多少个

该博客介绍了如何使用Java实现3个线程轮流打印'A'、'B'、'C',形成特定序列,并在达到200个字符时停止。文章通过线程同步和状态变量控制打印顺序,并在最后输出每个字符的打印数量。
摘要由CSDN通过智能技术生成

题目:java实现3个线程轮流打印A、B、C,达到“ABBCCCAAAABBBBBCCCCCC”,打印200个字符停止,并在控制台打印出A、B、C各打印了多少个。

思路:三个线程1、2、3分别负责打印A、B、C,lock锁和status实现线程1、线程2和线程3,status等于1时打印A,status等于2时打印B,status等于3时打印C。 lock2实现主线程等待线程1完成再打印ABC的个数。

最新版代码:

public class Printer {	
	private static final String A = "A";
	private static final String B = "B";
	private static final String C = "C";
	private static final int targetNum = 200; 
	private static volatile int num = 1;
	private static volatile int totalNum = 0;
	private static volatile String now = A;
	private static final Object lock = new Object();
	public static void main(String[] args) {
		Thread tA = new Thread(() -> {
			print(A);
		});
		Thread tB = new Thread(() -> {
			print(B);
		});
		Thread tC = new Thread(() -> {
			print(C);
		});	
		tA.start();
		tB.start();
		tC.start();
	}
	private final static void print(String type) {
		while(true) {
			synchronized(lock) {
				if(totalNum < targetNum) {				
					if(!type.equals(now)) {
						lock.notifyAll();
						continue;
					}
					if(totalNum >= targetNum) {
						lock.notifyAll();
						continue;
					}
					if(totalNum + num > targetNum) {
						num = targetNum - totalNum;
					}
					for(int i &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值