思路
- 1、通过公正琐object对10个线程进行管理,唤醒所有线程或者阻塞等待。
- 2、通过orderNum通知下一个线程需要输出的数字
代码
public class Printer {
private static final int endNum = 10;
static int orderNum = 0;
static Object object= new Object();
static class ThreadPrinter extends Thread {
private int printNum;
public ThreadPrinter(int printNum) {
this.printNum = printNum;
}
@Override
public void run() {
synchronized (object) {
while (orderNum < endNum) {
if (orderNum == printNum) {
System.out.print(printNum);
orderNum++;
if (orderNum == 10) {
System.out.println("\n打印完成");
}
object.notifyAll();
} else {
try {
object.wait();
} catch (InterruptedException e) {
System.out.println("线程" + printNum + "被打断了");
e.printStackTrace();
}
}
}
}
}
}
public static void main(String[] args) {
ThreadPrinter[] threadPrinters = new ThreadPrinter[10];
for (int i = endNum-1; i >= 0; i--) {
threadPrinters[i] = new ThreadPrinter(i);
threadPrinters[i].start();
}
}
}
运行结果
0123456789
打印完成