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
java实现线程交替打印1-52和A-Z的更多相关文章
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- 使用Java实现三个线程交替打印0-74
使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...
- 多线程下,两个线程交替打印0 -100,使用wait()和notify()
多线程下,两个线程交替打印0 -100,使用wait()和notify() public class ThreadTest{ private static final Object lock = ne ...
- Thread--两线程交替打印
package t3.copy; public class ThreadA extends Thread { private Object lock; public ThreadA(Object lo ...
- [Java并发]实现两个线程交替打印奇偶数(volatile+yield实现)
解题思路 实现一个类OddEven 有一个打印奇数的方法,有一个打印偶数的方法. 类中有一个volatile变量 ,用来控制当前状态是该哪个方法打印. 方法中打印每个数前首先判断volatile变量的 ...
- Java多线程--线程交替
要求:借助同步机制,sleep()方法,join()方法,实现动画显示:甲线程:1.3.5.7.9乙线程:2.4.6.8.10丙线程:a.b.c.d.emain()线程输出:线程开始,线程结束 输出结 ...
- 斐讯面试记录—三线程交替打印ABC
package cn.shenzhen.feixun; public class PrintABC extends Thread{ private String name; private Objec ...
- 两个线程交替打印奇偶数【Lock版】
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...
- A、B两个线程交替打印1 -- 100
方案一:import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.u ...
随机推荐
- Nginx系列p1:安装
学习新的知识都要从搭建环境开始,今天我们就来学习搭建一个 Nginx 环境. 环境:Ubuntu16.04 STL Nginx 1.16.1 Stable version 前言:当然可以通过 apt- ...
- idea使用eclipse风格
说明,只是代码编辑区采用eclipse风格,其他用的是idea的IntelliJ(白色风格) 1.下载文件 2.配置
- Redhat7 开机启动服务
#!/bin/sh ### BEGIN INIT INFO # Provides: jboss # Required-Start: $local_fs $remote_fs $network $sys ...
- postman批量接口测试注意事项
1.使用cvs文件 导入文件后最后行出现\r符号 用文本打开 删除最后一行空白行 2.打印cvs文件中的接口调用的参数 Pre-request Script: var beginDate=data.b ...
- 量化交易alpha、beta、shape等基本概念梳理
1.期货型基金(CTA)的 Alpha 和 Beta 是指什么? https://zhuanlan.zhihu.com/p/20700337 1980S ...
- Java学习笔记--精品札记
forech循环增强版(JDK1.7新特性) for(数组单位元素类型 i:遍历目标数组){ 代码块 } char(只能放单个字符)数组可以直接遍历不需要循环,其他数组不可以,必须遍历 toStrin ...
- selenium浏览器内核监测处理
一.代码 from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions option = Chr ...
- 常用DIV+CSS命名大全集合
一.命名规则说明: - TOP 1).所有的命名最好都小写 2).属性的值一定要用双引号("")括起来,且一定要有值如class="divcss5",i ...
- Windows Java桌面应用程序集成slf4j实现日志持久化
声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 Windows上一般的应用程序也可以通过日志系统打印日志到指定文件.通过这个例子想说明,问题处理的方法是多 ...
- poj2778 矩阵乘法+ac自动机
题:http://poj.org/problem?id=2778 题意:给定m个模式串,问长度为n的字符串不包含这些模式串的有几种可能 分析:因为n很大,所以考虑矩阵ksm来解决,构造一个矩阵res[ ...