Java控制多线程执行顺序

package net.jasonjiang.thread;

import java.io.IOException;  
  
public class ThreadTestNew {  
  
    public static void main(String[] args) throws IOException {  
        final Test obj = new Test();  
  
        new Thread() {  
            public void run() {  
                obj.m1();  
            }  
        }.start();  
        new Thread() {  
            public void run() {  
                obj.m2();  
            }  
        }.start();  
        new Thread() {  
            public void run() {  
                obj.m3();  
            }  
        }.start();  
  
    }  
  
}  
  
class Test {  
    volatile int target = 1;  
  
    public synchronized void m1() {  
        for (int i = 0; i < 10; i++) {  
            while (target == 2 || target == 3) {  
                try {  
                    wait();  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
            System.out.println("m1() =" + i);  
            target = 2;  
            notifyAll();  
        }  
    }  
  
    public synchronized void m2() {  
        for (int i = 0; i < 10; i++) {  
            while (target == 1 || target == 3) {  
                try {  
                    wait();  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
            System.out.println("m2() =" + i);  
            target = 3;  
            notifyAll();  
        }  
    }  
  
    public synchronized void m3() {  
        for (int i = 0; i < 10; i++) {  
            while (target == 1 || target == 2) {  
                try {  
                    wait();  
                } catch (InterruptedException e) {  
                    e.printStackTrace();  
                }  
            }  
            System.out.println("m3() =" + i);  
            target = 1;  
            notifyAll();  
        }  
    }  
}

运行结果:

m1() =0
m2() =0
m3() =0
m1() =1
m2() =1
m3() =1
m1() =2
m2() =2
m3() =2
m1() =3
m2() =3
m3() =3
m1() =4
m2() =4
m3() =4
m1() =5
m2() =5
m3() =5
m1() =6
m2() =6
m3() =6
m1() =7
m2() =7
m3() =7
m1() =8
m2() =8
m3() =8
m1() =9
m2() =9
m3() =9


原文地址:https://www.cnblogs.com/jasontec/p/9601680.html