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

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. 线轮流打印a,b,c

    2024-01-11 12:28:04       54 阅读
  2. 手撕面试题:线交叉打印ABC

    2024-01-11 12:28:04       45 阅读
  3. 线之交替输出abc

    2024-01-11 12:28:04       31 阅读
  4. 线交替打印

    2024-01-11 12:28:04       119 阅读
  5. C++ 线顺序打印

    2024-01-11 12:28:04       57 阅读
  6. 利用线打印出1 2 3

    2024-01-11 12:28:04       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-11 12:28:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-11 12:28:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-11 12:28:04       82 阅读
  4. Python语言-面向对象

    2024-01-11 12:28:04       91 阅读

热门阅读

  1. uniapp如何分包加载

    2024-01-11 12:28:04       55 阅读
  2. uniapp之页面返回并调用返回页方法

    2024-01-11 12:28:04       51 阅读
  3. 通过代码代替注解方式注入BEAN

    2024-01-11 12:28:04       57 阅读
  4. 使用云主机时要注意的情况

    2024-01-11 12:28:04       55 阅读
  5. P1643 完美数 题解

    2024-01-11 12:28:04       56 阅读
  6. sqlserver导出数据为excel再导入到另一个数据库

    2024-01-11 12:28:04       68 阅读
  7. 【Machine Learning】Other Stuff

    2024-01-11 12:28:04       44 阅读
  8. 数据结构之红黑树

    2024-01-11 12:28:04       63 阅读