Loading

[Java手撕]循环打印ABC

多线程循环打印ABC

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class Main {
    public static ReentrantLock Lock = new ReentrantLock();
    public static Condition ConditionA = Lock.newCondition();
    public static Condition ConditionB = Lock.newCondition();
    public static Condition ConditionC = Lock.newCondition();

    public static char next = 'A';

    public static void main(String[] args) {
        Thread threadA = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 10; i++) {
                    Lock.lock();
                    try {
                        while (next != 'A') {
                            ConditionA.await();
                        }
                        System.out.println("A");
                        next = 'B';
                        ConditionB.signal();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        Lock.unlock();
                    }
                }
            }
        });

        Thread threadB = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 10; i++) {
                    Lock.lock();
                    try {
                        while (next != 'B') {
                            ConditionB.await();
                        }
                        System.out.println("B");
                        next = 'C';
                        ConditionC.signal();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        Lock.unlock();
                    }
                }
            }
        });

        Thread threadC = new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 10; i++) {
                    Lock.lock();
                    try {
                        while (next != 'C') {
                            ConditionC.await();
                        }
                        System.out.println("C");
                        next = 'A';
                        ConditionA.signal();
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        Lock.unlock();
                    }
                }
            }
        });

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

posted @   Duancf  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示