双非本科准备秋招(22.2)—— 多线程交替打印

2024-02-10 18:52

本文主要是介绍双非本科准备秋招(22.2)—— 多线程交替打印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们建一个类,能实现交替打印,比如打印abcabcabc,并且能控制打印次数。

        让类继承ReentrantLock。类中有一个控制循环的变量loopCount,提供一个print方法,接收3个参数,一个是待打印的值c,一个是当前条件变量now,一个是要唤醒的下一个条件变量next

@Slf4j(topic = "c.test")
class Print extends ReentrantLock {private int loopCount;public Print(int loopCount){this.loopCount = loopCount;}public void print(String c, Condition now, Condition next){for(int i = 0; i < loopCount; i++){lock();try {now.await();log.debug("打印: " + c);next.signal();}catch (InterruptedException e){e.printStackTrace();}finally {unlock();}}}
}

主线程:打印3次,新建三个条件变量,分别是a、b、c

建立三个线程,第一个线程当前条件变量为a,然后唤醒b,依次进行。

一开始,三个线程启动,然后各自进入等待状态,等待当前条件变量。然后主线程唤醒了a条件变量,然后开始依次打印abc。

        Print p = new Print(3);Condition a = p.newCondition();Condition b = p.newCondition();Condition c = p.newCondition();new Thread(()->{p.print("a", a, b);}, "a线程").start();new Thread(()->{p.print("b", b, c);}, "a线程").start();new Thread(()->{p.print("c", c, a);}, "a线程").start();Thread.sleep(1000);p.lock();try {log.debug("开始唤醒a");a.signal();}finally {p.unlock();}

输出:

09:19:39 [main] c.test - 开始唤醒a
09:19:39 [a线程] c.test - 打印: a
09:19:39 [a线程] c.test - 打印: b
09:19:39 [a线程] c.test - 打印: c
09:19:39 [a线程] c.test - 打印: a
09:19:39 [a线程] c.test - 打印: b
09:19:39 [a线程] c.test - 打印: c
09:19:39 [a线程] c.test - 打印: a
09:19:39 [a线程] c.test - 打印: b
09:19:39 [a线程] c.test - 打印: c

这篇关于双非本科准备秋招(22.2)—— 多线程交替打印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697835

相关文章

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Python多进程、多线程、协程典型示例解析(最新推荐)

《Python多进程、多线程、协程典型示例解析(最新推荐)》:本文主要介绍Python多进程、多线程、协程典型示例解析(最新推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 目录一、multiprocessing(多进程)1. 模块简介2. 案例详解:并行计算平方和3. 实现逻

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2