題目:使用四個線程實現輸出ABCD,其中線程1輸出A,線程2輸出B,線程3輸出C,線程4輸出D,且要求線程1控制所有線程執行的次數。最終的輸出格式為ABCDABCD...(與輸入執行次數相關),線程的輸出順序是ABCD
思路:本人小白,緊做匯總,經過激烈討論,發現有兩個方法的思想比較好:
(1)使用消息通知和同步鎖機制,線程1輸出后通知線程2輸出,線程2輸出后通知線程3輸出,線程3輸出通知線程4輸出,線程4輸出通知線程1,形成一個線程執行環路。
(2)消費者首先通過監控者通知需要A,這時,當線程1符合要求時輸出A,通知監控者已輸出A,然后消費者依次通知需要BCDA...等
綜合比較,兩種思路是站在的角色角度不同,(1)是站在生產者角度考慮,生產者掌握控制權,主動提供數據。而(2)是生產者只負責提供數據,具體的掌控由消費者來控制。
所以,分清楚ABCD輸出順序是由誰控制的差別。生產者和消費者,一個負責生產,一個負責消費。
基于兩種思路,分別用代碼實現,具體代碼如下: