java实现线程交替打印1-52和A-Z
题目:
1.开启两个线程,一个线程打印A~Z,两一个线程打印1~52的数据。
2.实现交替打印,输出结果为12A34B...........5152Z.
3.请用多线程方式实现。
实现思路:通过锁(synchronized) 与wait(),notifyAll()的 或者lock、await()、signal()来实现,废话不多说,直接上代码:
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @author admin * @create 2019-12-27-15:08 */ public class Print { public boolean letterFlag = true;//线程结束标记; public boolean numFlag = true; //数字的初始值 int num = 1; //这里A~Z的字母对应的阿拉伯数字为65~90, int letter = 65; //线程等待标记 boolean flag = true; Lock lock = new ReentrantLock(); Condition condLetter = lock.newCondition(); Condition condNum = lock.newCondition(); public void printLetter() { if(letter>90){ letterFlag =false; return; } lock.lock(); try { if (flag){ condLetter.await(); } System.out.print((char)letter); letter++; flag=true; condNum.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void printNum() { if(num>=52){ numFlag =false; return; } lock.lock(); try { if (!flag){ condNum.await(); } System.out.print(num); num++; System.out.print(num); num++; flag=false; condLetter.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String[] args) { Print print =new Print(); new Thread(new Runnable() { @Override public void run() { while (print.numFlag){ print.printNum(); } } }).start(); new Thread(new Runnable() { @Override public void run() { while (print.letterFlag){ print.printLetter(); } } }).start(); } }
运行结果为:
12A34B56C78D910E1112F1314G1516H1718I1920J2122K2324L2526M2728N2930O3132P3334Q3536R3738S3940T4142U4344V4546W4748X4950Y5152Z
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix