多线程轮流打印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..."这样的字符串。

相关推荐
狂奔solar29 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE30 分钟前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
duration~32 分钟前
Maven随笔
java·maven
zmgst36 分钟前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
聪明的墨菲特i37 分钟前
Python爬虫学习
爬虫·python·学习
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java
朱一头zcy1 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧1 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++