使用多线程交替打印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相关推荐

  1. java 线程交替输出,[java]java经典问题之线程交替打印数字

    问题 给出两个线程,要求两个线程交替打印从1到100,例如:A线程打印1,B线程打印2,A线程打印3...依次类推,直到打印到100 思路 这里主要是考察对java中wait/notifyAll机制的 ...

  2. java中用两个线程交替打印0-100偶数和奇数

    1.第一种方式,用 synchronized 关键字来实现 public class ThreadDemo {static int count = 0;static Object lock = new ...

  3. java go多线程:两个线程交替打印 0~100 的奇偶数

    最近在实现raft算法,用到了很多go的高并发的知识,看到一道题写两个线程交替打印 1~100 的奇偶数,突然来了兴趣. 题目要求我们要启动两个线程,一个打印奇数,一个打印偶数.中途不能跳出协程. 代 ...

  4. java多线程交替打印_使用Java实现三个线程交替打印0-74

    使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...

  5. 三个线程交替打印ABC(Condition实现精确通知)

    三个线程交替打印ABC: package pc;import java.util.concurrent.locks.Condition; import java.util.concurrent.loc ...

  6. 两种方式实现线程通信:三个线程交替打印AABBCC

    多线程之间是抢占资源的,使用线程通信可以达到线程按序执行的目的 线程共享资源类, 首先创建一个资源类, 包含三个打印的方法以及首次打印的字符串 多个线程访问,方法加synchronized同步锁 cl ...

  7. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

  8. 使用Java线程并发库实现两个线程交替打印的线程题

    背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...

  9. Java两个线程交替打印奇偶数(两种方法对比)

    简介 本文将承接文章<Java多线程wait()和notify()系列方法使用教程>,我们将通过"两个线程交替打印100内的奇偶数",来展示下wait()方法和noti ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第24期)
  2. R语言使用lm构建线性回归模型、并将目标变量对数化实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型系数(coefficient)、模型总结信息(summary)、残差总结信息
  3. 推荐 4 款 MySQL 调优工具,大神都在用!
  4. MVC全局用户验证之HttpModule
  5. StringBuilder的构造方法和append方法
  6. 音视频领域或将开启”外卷“之路
  7. c语言修仙受控可看吗,强推三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花...
  8. KETTLE集群搭建
  9. 雅思准考证可以下载到电脑上吗
  10. 京东商城禁止一淘网蜘蛛抓取内容
  11. 大数据hadoop 面试经典题
  12. brconfig bridge0 add emac0 add vp0 up
  13. mt6735通用recovery_Mtkroot ,arm64通用使用无需bl或者rec,安卓7以下使用最佳!
  14. 山东标梵讲解如何在HTML文档中使用CSS样式表?
  15. 《Cesium 进阶知识点》 - 离线瓦片数据(生成和开发)
  16. 微信支付服务器错误,【支付问题】微信支付宝支付超时、支付异常解决办法
  17. 湖人控卫鲍尔左脚踝三级扭伤 预计缺席4-6周
  18. ★一名“标题党”自我修炼的10大技巧
  19. 【Vue】Vue全家桶(九)Vue3
  20. 从C程序到bin文件

热门文章

  1. 局域网工业交换机的种类和选择注意事项!
  2. 串口服务器常见异常情况排除方法介绍
  3. 工业交换机与光纤收发器的区别
  4. 【渝粤题库】国家开放大学2021春2038财务管理题目
  5. 1835财务报表分析 (2)
  6. 牛顿法, Jacobian矩阵 和 Hessian矩阵
  7. Php数组面包屑导航,php可应用于面包屑导航的迭代寻找家谱树实现方法
  8. MATLAB成形滤波、信号过信道
  9. Java面向对象(17)--类代码块
  10. 打砖块小游戏php程序,利用原生js实现html5打砖块小游戏(代码示例)