[OCPJP]CyclicBarrier的用法

Given:

and the code fragment:

You have been asked to ensure that the run methods of both the Worker and Master classes are executed.

Which modification meets the requirement?

A. At line n2, insert CyclicBarrier cb = new CyclicBarrier(2, master);
B. Replace line n1 with class Master extends Thread {
C. At line n2, insert CyclicBarrier cb = new CyclicBarrier(1, master);
D. At line n2, insert CyclicBarrier cb = new CyclicBarrier(master);

題解

程式第42行,在Worker的建構子用到了cb變數作為引數傳入,所以line n2一定要定義cb變數是什麼東西。

CyclicBarrierJava內建的類別,位於java.util.concurrent套件下,用來讓某個執行緒等待至指定數量的執行緒呼叫CyclicBarrier的await方法後才繼續執行。

選項A,此種CyclicBarrier物件實體化方式需要呼叫兩次CyclicBarrier的await方法後,await方法之後的程式才會被執行,但是在題目給的程式中,await只有在第11行被呼叫過,因此永遠執行不到第12行,而且也無法執行master這個Runnable物件。

選項B,應該要修改line n2才是正確的。

選項C,此種CyclicBarrier物件實體化方式只需要呼叫一次CyclicBarrier的await方法後,傳入CyclicBarrier建構子的master這個Runnable物件和await方法之後的程式都會被執行,所以這是正確答案。

選項D,CyclicBarrier類別沒有這種建構子

關於作者

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章