java控制多线程执行顺序
2013-11-19 17:43
393 查看
[java] view
plaincopyprint?
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();
}
}
}
输出结果:
[java] view
plaincopyprint?
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
参考:http://www.blogjava.net/santicom/archive/2011/09/02/357783.html
plaincopyprint?
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();
}
}
}
输出结果:
[java] view
plaincopyprint?
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
参考:http://www.blogjava.net/santicom/archive/2011/09/02/357783.html
相关文章推荐
- java控制多线程执行顺序
- Java控制多线程执行顺序
- Java多线程系列四——控制线程执行顺序
- java 多线程控制线程执行顺序
- java中结合单例模式,控制单例类的某方法在被多线程调用时,只被1个线程调用执行,执行完毕后才被另一线程调用
- java多线程编码,顺序执行(同步)
- Java 多线程 (PART VII) 使用join()方法保证线程的执行顺序
- java中线程执行顺序控制
- java 中线程执行顺序控制
- Java--线程的先后执行顺序控制
- java join 多线程顺序执行
- JAVA Lock 多线程顺序执行
- Java控制3个线程顺序执行2次
- java 中线程执行顺序控制
- java多线程学习之启动顺序不等于执行顺序
- Java 在多线程当中顺序执行程序
- java中控制线程间执行顺序的方法
- JAVA 控制执行完多线程的任务再来执行主线程
- Javaの线程之多线程执行顺序
- OC中多线程执行顺序的控制