2013-05-08 57 views
-1

作爲我工作的一個項目的一部分(使用Java),我面臨以下問題:我想顯示n個值。爲了解釋的目的,n = 10(1至10)。我生成一個隨機數(範圍從1到10)並選擇一個我不想顯示的數字。假設我的隨機數是5.Java ArrayList - 線程

我在主線程中顯示從1到4的數字,並啓動另一個線程,我在其中休眠25毫秒。與此同時,我在主線程中將數字6到10存儲在臨時數組列表中。在5號睡眠時間到期後,我想訪問臨時數組列表中的元素,並逐個顯示它們。

我需要在控制與信號傳送到主線程幫助,5號的過期時間,讓我與顯示6至10

PS進行:獲得這個工作後,我需要將這個想法擴展到像1到10000這樣的更大的空間中的多個丟失的隨機數字,同時我緩衝丟失數字之間的數字。

+1

你能告訴我們你試過的代碼嗎?當你說'我需要幫助將控制轉移到主線程'時,你會非常模糊。 – 2013-05-08 01:29:14

+0

這個解決方案需要2個線程嗎?由於線程時序幾乎不可能在沒有大量處理時間延遲的情況下完成。 – 2013-05-08 01:31:51

+0

你可以使用'CountDownLatch'。將CountDownLatch設置爲1。第二個線程在等待規定的時間之後會「計數」。你的主線程會簡單地調用'CountDownLatch#await'。如果第二個線程沒有完成,這將暫停主線程,如果沒有,則繼續。你也可以使用像AtomicBoolean這樣的東西,但是開始變得混亂。 – MadProgrammer 2013-05-08 01:34:19

回答

0

此答案假設您有一個ArrayList調用displayNums,其中包含您想要顯示的所有數字。

在時間到期時(這是在第二個線程)

synchronized (displayNums) { 
    displayNums.addAll(heldNums); 
} 
myDisplayArea.repaint(); 

唯一棘手的部分是,你需要用一個​​塊像這樣的每次訪問displayNums