疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java控制多线程执行顺序


 

        java控制多线程执行顺序

  package com.yihaomen.mybatis.inter;

  import java.io.IOException;

  public class TestThread {

  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 {

  static int count;

  volatile int target = 1;

  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();

  }

  }

  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();

  }

  }

  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