博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程-按顺序输出ABCABC
阅读量:5771 次
发布时间:2019-06-18

本文共 2935 字,大约阅读时间需要 9 分钟。

巧妙方法1 利用数组的余数的特性

public class Myprint3 { private int i = 0;

public static void main(String[] args) {    Myprint3 myprint3 = new Myprint3();    new Thread(new Runnable() {        @Override        public void run() {            while (true) {               synchronized (myprint3){                   if(myprint3.i%3==0){                       System.out.println(Thread.currentThread().getName()+"A");                       myprint3.myPirnt();                   }               }            }        }    }).start();    new Thread(new Runnable() {        @Override        public void run() {            while (true) {                synchronized (myprint3){                    if(myprint3.i%3==1){                        System.out.println(Thread.currentThread().getName()+"B");                        myprint3.myPirnt();                    }                }            }        }    }).start();    new Thread(new Runnable() {        @Override        public void run() {            while (true) {                synchronized (myprint3){                    if(myprint3.i%3==2){                        System.out.println(Thread.currentThread().getName()+"C");                        myprint3.myPirnt();                    }                }            }        }    }).start();}public void myPirnt() {    i++;}复制代码

}

常规方法 使用三个信号量,开控制

public int i; public boolean a = true; public boolean b = false; public boolean c = false;

public static void main(String[] args) {    Myprint myprint = new Myprint();    new Thread(new Runnable() {        @Override        public void run() {            while (true) {                synchronized (myprint) {                    while (myprint.a) {                        myprint.getAdd();                        myprint.a=false;                        myprint.b=true;                        myprint.c=false;                    }                }            }        }    }).start();    new Thread(new Runnable() {        @Override        public void run() {            while (true) {                synchronized (myprint) {                    while (myprint.b) {                        myprint.getAdd();                        myprint.a=false;                        myprint.b=false;                        myprint.c=true;                    }                }            }        }    }).start();    new Thread(new Runnable() {        @Override        public void run() {            while (true) {                synchronized (myprint) {                    while (myprint.c) {                        myprint.getAdd();                        myprint.a=true;                        myprint.b=false;                        myprint.c=false;                    }                }            }        }    }).start();}public void getAdd() {    for (int j = 0; j < 5; j++) {        i++;        System.out.println(Thread.currentThread().getName()+i);    }}复制代码

转载于:https://juejin.im/post/5cdd246ee51d456e79545d70

你可能感兴趣的文章
系列文章目录
查看>>
手把手教你如何提高神经网络的性能
查看>>
前端布局原理涉及到的相关概念总结
查看>>
递归调用 VS 循环调用
查看>>
使用sstream读取字符串中的数字(c++)
查看>>
树莓派下实现ngrok自启动
查看>>
javascript静态类型检测工具—Flow
查看>>
MachineLearning-Sklearn——环境搭建
查看>>
node学习之路(二)—— Node.js 连接 MongoDB
查看>>
《深入理解java虚拟机》学习笔记系列——垃圾收集器&内存分配策略
查看>>
TriggerMesh开源用于多云环境的Knative Event Sources
查看>>
GitLab联合DigitalOcean为开源社区提供GitLab CI免费托管
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
区块链现状:从谨慎和批判性思维看待它(第二部分)
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
GCM 3.0采用类似方式向Android、iOS和Chrome发送消息
查看>>
如何成为一家敏捷银行
查看>>
Oracle在JavaOne上宣布Java EE 8将会延期至2017年底
查看>>
Javascript 深入浅出原型
查看>>
简单之极,搭建属于自己的Data Mining环境(Spark版本)
查看>>