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 ...
随机推荐
- composer命令卡慢,使用国内源
执行composer install.update 和require的时候,遇到卡住不动的情况,可以切换到国内阿里云的源 composer config -g repo.packagist compo ...
- [LC] 863. All Nodes Distance K in Binary Tree
We are given a binary tree (with root node root), a target node, and an integer value K. Return a li ...
- 使用linux服务器安装wordpress博客详细教程
前言 最近读了<软技能:代码之外的生存指南>,这本书给了我很大的启示.之前虽然知道作为一个程序员,应该拥有自己的博客,以便于提升自己的知名度,但是并没有了解的过于详细.这本书描写博客的作用 ...
- Kafka学习(学习过程记录)
Apache kafka 这,仅是我学习过程中记录的笔记.确定了一个待研究的主题,对这个主题进行全方面的剖析.笔记是用来方便我回顾与学习的,欢迎大家与我进行交流沟通,共同成长.不止是技术. Kafka ...
- 史上最难PHPer笔试题,40分就能月薪过万!附答案
请批判性的学习,欢迎大牛指正错误 1.有关PHP字符串的说法,不对的是:A.如果一个脚本的编码是 ISO-8859-1,则其中的字符串也会被编码为 ISO-8859-1.B.PHP的字符串在内部是字节 ...
- psmisc
https://packages.ubuntu.com/xenial/psmisc Package: psmisc (22.21-2.1build1) Other Packages Related t ...
- 别了JetBrains,换Visual Studio
Visual Studio一直是我排斥的,这么多年一致不用. 2019年JetBrains的注册码越来越频繁的被封杀,我承认使用盗版不对. 试过Eclipse+pydev搞python,但是todo用 ...
- c#学习笔记03——委托和事件
委托:一种引用类型,这种类型可以用来定义方法签名,从而使用委托实现将方法作为参数传递给其他方法.类似于C++中的函数之争,使用委托使程序员可以将方法引用封装在委托对象内. 定义和声明委托: deleg ...
- ubuntu18安装pytorch1.3
环境: ubuntu18 anaconda 创建一个新的环境 conda create -n env_name python=version 激活并进入环境中 conda activate env_n ...
- KeyError: 'xxx does not support field: _id'
Scrapy存储爬取的数据时,提示不支持某些字段 在Item文件中,添加对应的字段即可