[Java手撕]交替打印0-100

两个线程交替打印0-100#

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


public class Main {

    public static ReentrantLock lock = new ReentrantLock();
    public static Condition odd = lock.newCondition();
    public static Condition even = lock.newCondition();
    public static char flag = 'e';

    public static void main(String[] args) {

        // 0
        new Thread(() -> {
            for (int i = 0; i <= 100; i += 2) {
                lock.lock();
                try {
                    while (flag != 'e') {
                        even.await();
                    }
                    System.out.println(Thread.currentThread().getName() + "打印 " + i);
                    flag = 'o';
                    odd.signal();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                } finally {
                    lock.unlock();
                }
            }
        }).start();

        // 1
        new Thread(() -> {
            for (int i = 1; i <= 100; i += 2) {
                lock.lock();
                try {
                    while (flag != 'o') {
                        odd.await();
                    }
                    System.out.println(Thread.currentThread().getName() + "打印 " + i);
                    flag = 'e';
                    even.signal();
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                } finally {
                    lock.unlock();
                }
            }
        }).start();
    }
}

作者:Esofar

出处:https://www.cnblogs.com/DCFV/p/18391250

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Duancf  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示