首页 > 编程语言 >[Java手撕]交替打印0-100

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

时间:2024-09-01 14:15:24浏览次数:10  
标签:ReentrantLock Java lock 打印 static 100 public Condition

两个线程交替打印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();
    }
}

标签:ReentrantLock,Java,lock,打印,static,100,public,Condition
From: https://www.cnblogs.com/DCFV/p/18391250

相关文章

  • [Java手撕]循环打印ABC
    多线程循环打印ABCimportjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;publicclassMain{publicstaticReentrantLockLock=newReentrantLock();publicstaticConditionConditionA=Lock.newCondition();......
  • 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......
  • 人工智能100个AI术语
    你好,我是三桥君人工智能(AI)技术的快速发展正深刻地改变着我们的世界。作为产品经理,深入了解并掌握AI的最新动态与技术是保持竞争力的关键。然而,对于多数人而言,涉猎专业的AI知识并非易事。鉴于此,我萌生了推动这一学习过程的想法。为此,三桥君整理了一套包含100个AI术语的资料......
  • 基于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......}     ......