多线程轮流打印a,b,c

java 复制代码
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class PrintABC {
    private static Lock lock = new ReentrantLock();
    private static Condition conditionA = lock.newCondition();
    private static Condition conditionB = lock.newCondition();
    private static Condition conditionC = lock.newCondition();
    private static int count = 0;

    public static void main(String[] args) {
        Thread threadA = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                print("A", conditionA, conditionB);
            }
        });

        Thread threadB = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                print("B", conditionB, conditionC);
            }
        });

        Thread threadC = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                print("C", conditionC, conditionA);
            }
        });

        threadA.start();
        threadB.start();
        threadC.start();
    }

    private static void print(String str, Condition current, Condition next) {
        lock.lock();
        try {
            while (count % 3 != 0) {
                current.await();
            }
            System.out.print(str);
            count++;
            next.signal();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }
}

在这个示例中,我们使用了ReentrantLock和Condition来实现线程之间的协作。每个线程在打印自己的字符后,会唤醒下一个线程,并等待自己的下一个轮次。通过这种方式,三个线程可以轮流打印出"abcabcabc..."这样的字符串。

相关推荐
盛夏绽放1 分钟前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2611 分钟前
Python训练营打卡DAY27
开发语言·python·机器学习
蹦蹦跳跳真可爱5891 分钟前
Python----神经网络(基于DNN的风电功率预测)
人工智能·pytorch·python·深度学习·神经网络·dnn
繁依Fanyi20 分钟前
我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
java·pdf·uni-app·生活·harmonyos·codebuddy首席试玩官
冰轮a20 分钟前
Python打卡 DAY 27
python
遗憾皆是温柔28 分钟前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
LallanaLee1 小时前
常见面试题
java·开发语言
小秋学嵌入式-不读研版1 小时前
C42-作业练习
c语言·开发语言·笔记
爱尚你19931 小时前
Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?
java
拓端研究室TRL1 小时前
Python与MySQL网站排名数据分析及多层感知机MLP、机器学习优化策略和地理可视化应用|附AI智能体数据代码
人工智能·python·mysql·机器学习·数据分析