1. 程式人生 > >讓10個執行緒按順序打印出0123456789

讓10個執行緒按順序打印出0123456789

思路

  • 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
列印完成