java实现123n_java三线程交替打印123……n
使用多线程交替打印1--n,a进程打印1,4,7,……(3n+1),b进程打印2,7,10,……(3n+2),c进程打印3,6,9,……(3n)
涉及到多线程的同步,阻塞,wait,notify
代码如下
Num.java
public class Num {
private int num = 0;
public Num(int num) {
this.num = num;
}
public synchronized void printOne() {
try {
while (num%3!=1) {
this.wait();
}
System.out.println(Thread.currentThread().getName() + "------->"
+ (num++));
Thread.sleep(1000);
this.notifyAll();
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized void printTwo() {
try {
while (num%3!=2) {
this.wait();
}
System.out.println(Thread.currentThread().getName() + "------->"
+ (num++));
Thread.sleep(1000);
this.notifyAll();
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized void printThr() {
try {
while (num%3!=0) {
this.wait();
}
System.out.println(Thread.currentThread().getName() + "------->"
+ (num++));
Thread.sleep(1000);
this.notifyAll();
} catch (Exception e) {
e.printStackTrace();
}
}
} 三个线程类
public class PrintOne implements Runnable {
private Num num;
public PrintOne(Num num) {
this.num = num;
}
@Override
public void run() {
while (true) {
num.printOne();
}
}
}
public class PrintTwo implements Runnable {
private Num num;
public PrintTwo(Num num) {
this.num = num;
}
@Override
public void run() {
while (true) {
num.printTwo();
}
}
}
public class PrintThr implements Runnable {
private Num num;
public PrintThr(Num num) {
this.num = num;
}
@Override
public void run() {
while (true) {
num.printThr();
}
}
}
测试类
public class Test {
public static void main(String[] args) {
Num num = new Num(0);
Thread pOne = new Thread(new PrintOne(num));
Thread pTwo = new Thread(new PrintTwo(num));
Thread pThr = new Thread(new PrintThr(num));
pOne.setName("3n+1");
pTwo.setName("3n+2");
pThr.setName("3n ");
pOne.start();
pTwo.start();
pThr.start();
}
}
效果
3n ------->0
3n+1------->1
3n+2------->2
3n ------->3
3n+1------->4
3n+2------->5
…………
java实现123n_java三线程交替打印123……n相关推荐
- java 线程交替输出,[java]java经典问题之线程交替打印数字
问题 给出两个线程,要求两个线程交替打印从1到100,例如:A线程打印1,B线程打印2,A线程打印3...依次类推,直到打印到100 思路 这里主要是考察对java中wait/notifyAll机制的 ...
- java中用两个线程交替打印0-100偶数和奇数
1.第一种方式,用 synchronized 关键字来实现 public class ThreadDemo {static int count = 0;static Object lock = new ...
- java go多线程:两个线程交替打印 0~100 的奇偶数
最近在实现raft算法,用到了很多go的高并发的知识,看到一道题写两个线程交替打印 1~100 的奇偶数,突然来了兴趣. 题目要求我们要启动两个线程,一个打印奇数,一个打印偶数.中途不能跳出协程. 代 ...
- java多线程交替打印_使用Java实现三个线程交替打印0-74
使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...
- 三个线程交替打印ABC(Condition实现精确通知)
三个线程交替打印ABC: package pc;import java.util.concurrent.locks.Condition; import java.util.concurrent.loc ...
- 两种方式实现线程通信:三个线程交替打印AABBCC
多线程之间是抢占资源的,使用线程通信可以达到线程按序执行的目的 线程共享资源类, 首先创建一个资源类, 包含三个打印的方法以及首次打印的字符串 多个线程访问,方法加synchronized同步锁 cl ...
- Java常见的面试算法题:实现两个线程交替打印1到100的数
Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- Java两个线程交替打印奇偶数(两种方法对比)
简介 本文将承接文章<Java多线程wait()和notify()系列方法使用教程>,我们将通过"两个线程交替打印100内的奇偶数",来展示下wait()方法和noti ...
最新文章
- 力扣(LeetCode)刷题,简单题(第24期)
- R语言使用lm构建线性回归模型、并将目标变量对数化实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型系数(coefficient)、模型总结信息(summary)、残差总结信息
- 推荐 4 款 MySQL 调优工具,大神都在用!
- MVC全局用户验证之HttpModule
- StringBuilder的构造方法和append方法
- 音视频领域或将开启”外卷“之路
- c语言修仙受控可看吗,强推三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花...
- KETTLE集群搭建
- 雅思准考证可以下载到电脑上吗
- 京东商城禁止一淘网蜘蛛抓取内容
- 大数据hadoop 面试经典题
- brconfig bridge0 add emac0 add vp0 up
- mt6735通用recovery_Mtkroot ,arm64通用使用无需bl或者rec,安卓7以下使用最佳!
- 山东标梵讲解如何在HTML文档中使用CSS样式表?
- 《Cesium 进阶知识点》 - 离线瓦片数据(生成和开发)
- 微信支付服务器错误,【支付问题】微信支付宝支付超时、支付异常解决办法
- 湖人控卫鲍尔左脚踝三级扭伤 预计缺席4-6周
- ★一名“标题党”自我修炼的10大技巧
- 【Vue】Vue全家桶(九)Vue3
- 从C程序到bin文件