自我记录自我记录 加深印象
因为多线程启动后,执行的顺序基本上是无序的,因此如何控制其顺序是一个值得思考的点,这里在程序里对其进行控制
public class MyThread extends Thread {
private String threadName;
//与addCount结合,控制打印的位置信息
private int position;
private Object lock;
//用于控制打印顺序
volatile private static int addCount = 1;
//printCount用于控制打印的篇数
private int printCount = 0;
public MyThread(String threadName, Object lock, int position) {
this.threadName = threadName;
this.lock = lock;
this.position = position;
}
@Override
public void run() {
synchronized (lock) {
while (true) {
if (addCount % 3 == position) {
System.out.println(this.threadName + " is printing...");
addCount ++;
printCount ++;
lock.notifyAll();
//如果将这里设定为3,那么会按顺序打印三遍结果
if (printCount == 2) {
break;
}
} else {
try {
lock.wait();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block <br>
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
Object lock = new Object();
// 因为addCount = 1 而1%3 = 1,所以第一次打印的线程为A
MyThread myThread01 = new MyThread("A", lock, 1);
MyThread myThread02 = new MyThread("B", lock, 2);
MyThread myThread03 = new MyThread("C", lock, 0);
myThread01.start();
myThread02.start();
myThread03.start();
}
}
运行结果为: