Java 三个线程依次输出ABC
源于:https://lax.v2ex.com/t/547045#reply43
编写一个程序,开启 3 个线程 A,B,C,这三个线程的输出分别为 A、B、C,每个线程将自己的 输出在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC....
1 package com.ljw.HelloJava;
2
3 import java.util.concurrent.TimeUnit;
4 import java.util.function.Predicate;
5
6 public class ABCThreads {
7 private static Integer index = 0;
8 private static Integer max = 6;
9 private static Object lock = new Object();
10
11 public static void main(String[] args) {
12
13 Thread a = getThread(i -> i % 3 == 0, "A");
14 Thread b = getThread(i -> i % 3 == 1, "B");
15 Thread c = getThread(i -> i % 3 == 2, "C");
16 a.start();
17 b.start();
18 c.start();
19
20 }
21
22 private static Thread getThread(Predicate<Integer> condition, String value) {
23 return new Thread(() -> {
24 while (true) {
25 synchronized (lock) {
26 while (!condition.test(index)) {
27 try {
28 //如果已经不需要继续,直接return,避免继续等待
29 if (index >= max) {
30 return;
31 }
32 lock.wait();
33 } catch (InterruptedException e) {
34 System.out.println(e.getMessage());
35 }
36 }
37 //如果已经不需要继续,通知所有wait的线程收拾东西回家后,然后自己回家
38 if (index >= max) {
39 lock.notifyAll();
40 return;
41 }
42
43 System.out.printf("index:%s,value:%s\n", index, value);
44 index++;
45 lock.notifyAll();
46 }
47 }
48 });
49 }
50 }
Java 三个线程依次输出ABC的更多相关文章
- 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
简要分析: 要求三个线程轮流输出,这里我们要使用一个对象锁,让关键部分的代码放入同步块当中.同时要有一个变量记录打印的次数到达10次循环后不再打印,另外一个就是要给每个线程一个标志号,我们根据标识号来 ...
- 用三个线程循环输出ABC
前两天看Java吧有人求助这个问题.想了想并不是很难.今天就顺手实现了一下. 我自己想到的有两种方法,一个是使用synchronized,一个是使用lock. 一.synchronized packa ...
- Java使用volatile实现多线程输出ABC共10次
问题 有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C.要求,同时启动三个线程, 按顺序输出ABC, 循环10次. 今天在写多线程的时候找例子,见到了这样一个题,觉得不难,但是在网 ...
- Java多线程:用三个线程控制循环输出10次ABC
转载:http://www.cnblogs.com/gaopeng527/p/5257884.html 题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个 ...
- java多线程编程题之连续打印abc的几种解法
一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...
- Java多线程02(线程安全、线程同步、等待唤醒机制)
Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...
- java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现
注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...
- java Semaphore实现ABC三个线程循环打印
Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...
- java中使用ReentrantLock锁中的Condition实现三个线程之间通信,交替输出信息
本文直接附上源代码,如下是自己写的一个例子 面试题需求: 使用Condition来实现 三个线程 线程1 线程2 线程3 三个交替输出 [按照 线程1(main)-->线程2-->线程3] ...
随机推荐
- LiveNVR安防Onvif_RTSP流媒体服务-服务器配置及带宽消耗计算参考
LiveNVR Onvif/RTSP流媒体服务,支持RTSP稳定拉流接入,支持Onvif协议接入,支持RTMP/HLS/HTTP-FLV分发,将传统安防监控设备互联化,无插件直播等. 理论1Mbps存 ...
- kubernetes事件监控工具--Kube-Event
最近遇到一个很头疼的需求:Kubernetes 集群内部事件的监控与追踪. 在日常使用中,总会碰到容器"不经意间"重启的情况,但我完全不知道上次重启是什么时候.容器一旦重启,旧 ...
- 2025年搜索式BI深度研究报告:核心功能、应用场景与产品选型
1. 搜索式BI的核心功能与技术特性 搜索式BI(Search-based Business Intelligence)作为一种新兴的商业智能范式,正在深刻地改变企业获取.分析和利用数据的方式.其核心 ...
- 一款基于 .NET 开源免费、高效且用户友好文件搜索工具!
前言 无论是工作中的项目文档,还是学习中的研究资料,高效地管理和搜索这些文件成为了我们提升工作效率的关键.今天大姚给大家分享一款基于 .NET 开源免费(MIT license).高效且用户友好的文件 ...
- delphi调用百度语音识别REST API
delphi调用百度语音识别REST API-20160616-感谢 魔术猫 和 DelphiTeacher 兄的帮助解决了返回中文乱码的问题!-注:语音的录音格式目前只支持评测8k/16k采样率16 ...
- Vue3+ElementPlus的BS端主从表的快速开发
在实际业务中,主从表的情况也是很常见的,如订单和订单明细,报价单和报价单明细,工艺和工艺路线,进货单和进货单明细等等,很常见的处理类型. 主从表一般涉及两个以上的表,一个是主表,其他的是从表的,在实际 ...
- FMT标准库
标准库fmt提供了以下几种输出相关函数 Print Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出 ...
- vscode如何设置目录分级显示
1.vscode默认目录展示:在当前目录下如果只有一个分支,这个分支总是横向显示,我们更习惯是分级显示. 2.设置目录分级展示 第1:File--Perferences--Settings 第2:Se ...
- 软件开发 --- Django Hello World 项目
项目简介 这是一个简单的Django示例项目,用于展示Django框架的基本使用方法.项目主要功能是在网页上显示"Hello World"文本. 环境要求 Python 3.x D ...
- XPOSED优秀模块列表 --- Enable camera on lockscreen(三星在锁屏上启用相机)
允许在用密码锁定设备的情况下打开相机. 打开图库会让用户回到锁屏状态. 在 Galaxy Note 2 (N7100) 上测试,但应该可以在任何带有 Nature UX(SII.SIII 等)的三星设 ...