多线程-按顺序输出ABCABC
巧妙方法1 利用数组的余数的特性
【多线程-按顺序输出ABCABC】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
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 牛人进化+|牛人进化+ 按自己的意愿过一生
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式