首页 > 编程语言 >[Java手撕]循环打印ABC

[Java手撕]循环打印ABC

时间:2024-09-01 14:15:06浏览次数:9  
标签:ABC Java Thread Lock 打印 next static new public

多线程循环打印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();
    }
}

标签:ABC,Java,Thread,Lock,打印,next,static,new,public
From: https://www.cnblogs.com/DCFV/p/18391249

相关文章

  • JAVA高级编程之集合框架和泛型(超详细)
    Java集合框架包含的内容Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中Collection接口存储一组不唯一,无序的对象List接口存储一组不唯一,有序(插入顺序)的对象Set接口存储一组唯一,无序的对象Map接口存储一组键值对象,提供key到value的映......
  • Java-数据结构-ArrayList-练习 ψ(*`ー´)ψ
    目录:一、练习一(删除str1中str2出现的元素):二、练习二(杨辉三角):三、练习三(简单的洗牌算法):总结:一、练习一(删除str1中str2出现的元素):我们先来看看这个题的条件是什么和如何去做:我们来看代码是什么样的:publicstaticvoidmain(String[]args){//练习1......
  • Java并发编程面试必备:如何创建线程池、线程池拒绝策略
    一、线程池1.线程池使用1.1如何配置线程池大小如何配置线程池大小要看业务系统执行的任务更多的是计算密集型任务,还是I/O密集型任务。大家可以从这两个方面来回答面试官。(1)如果是计算密集型任务,通常情况下,CPU个数为N,设置N+1个线程数量能够实现最优的资源利用率。因为N......
  • 题解:AT_abc257_d [ABC257D] Jumping Takahashi 2
    [ABC257D]JumpingTakahashi2博客食用更佳:Myblog。大体思路这题是一道二分题,因为\(S\)越大,就越容易满足题目要求,\(S\)越小,就越难满足题目要求,符合二分的特点。下面先贴上二分代码。LLl=0,r=1e10;while(l<r){intmid=l+r>>1;if(check(mid))......
  • 基于Java+SpringBoot+Mysql在线众筹系统功能设计与实现一
    一、前言介绍:1.1项目摘要随着互联网的普及和人们消费观念的转变,众筹作为一种创新的融资方式,逐渐受到社会各界的关注和青睐。它打破了传统融资模式的限制,为初创企业、艺术家、公益项目等提供了更为灵活和便捷的融资渠道。因此,开发众筹系统旨在满足这一市场需求,促进创新项......
  • JavaScript程序结构
    程序结构有三种:选择结构、循环结构 、顺序结构一、选择结构1、简介根据条件进行判断,从而执行不同的操作,称为选择结构(分支结构),其实就是条件判断选择结构的类型:if、switch2、if结构分为:单分支结构、二分支结构、多分支结构、嵌套if结构 语法:if(条件1){代码块1}e......
  • Java 性能优化: 代码层面的调优策略
    Java性能优化:代码层面的调优策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Java性能优化是确保应用高效运行的关键环节。代码层面的调优可以显著提高程序的执行效率和响应速度。以下是一些代码层面的调优策略。避免冗余对象创建无意义的对象创建......
  • 探索Java的String魔法:揭秘“+”操作符的实现
    探索Java的String魔法:揭秘“+”操作符的实现在Java的世界里,String是一个无处不在的数据类型,它用于存储和操作文本数据。String的“+”操作符是连接字符串的常用方式,但你是否曾想过,这个看似简单的操作符背后隐藏着怎样的魔法?本文将深入探讨Java中String的“+”操作符是如何......
  • Java语言 数组定义与赋值 类型总结
    总结1.定义:数据类型[]数组名;2. 赋值(长度): 数组名=new数据类型[数组的长度];3.数据类型[]数组名=new数据类型[数组的长度]4.赋值(初始化)(第四点详细的看下面具体分析)   数据类型[]数组名=new数据类型[数组的长度]{元素1,元素2......}     ......
  • Java 线程实现暂停、中止
    需求:用户可以开启任务,暂停任务和中止任务。用户开启任务后,可以随时暂停或者中止。暂停后又可以回到原进度继续运行。这里写目录标题demo版-使用废弃的stop、suspend、resume实现为什么废弃了?不用stop,如何销毁线程呢?正式版延迟版:wait和notify、join和interrupt、LockSu......