一道經典的Java多執行緒程式設計題
阿新 • • 發佈:2019-02-08
問題描述
啟動3個執行緒列印遞增的數字, 執行緒1先列印1,2,3,4,5, 然後是執行緒2列印6,7,8,9,10, 然後是執行緒3列印11,12,13,14,15. 接著再由執行緒1列印16,17,18,19,20....以此類推, 直到列印到75. 程式的輸出結果應該為:
執行緒1: 1
執行緒1: 2
執行緒1: 3
執行緒1: 4
執行緒1: 5
執行緒2: 6
執行緒2: 7
執行緒2: 8
執行緒2: 9
執行緒2: 10
...
執行緒3: 71
執行緒3: 72
執行緒3: 73
執行緒3: 74
執行緒3: 75
解法:
public class Print { public static void main(String[] args) { new Thread(new PrintRunnable(1)).start(); new Thread(new PrintRunnable(2)).start(); new Thread(new PrintRunnable(3)).start(); } } class PrintRunnable implements Runnable { private static volatile int printNum = 0; private int threadId; public PrintRunnable(int threadId){ this.threadId = threadId; } @Override public void run() { synchronized (Print.class){ while(printNum < 75){ if (printNum/5%3 + 1 == threadId){ for (int i = 0; i <5; i++) { System.out.println("執行緒"+threadId+":"+(++printNum)); } Print.class.notifyAll(); }else { try { Print.class.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }