要求如下:主線程需要產生n個線程。他們將通過頻道發送和接收消息。一旦我收到n/2 + 1 acks,Master就會繼續進行。處理使用CountDownLatch的其餘線程
使用CountDownLatch如下。問題在於線程的Ack未被接收(在倒計數變爲零之前)是纏繞導致新線程創建內存異常的原因。
代碼是這樣的:
final CountDownLatch Acks = new CountDownLatch(n/2+1);
for (SocketChannel r : n) {
new Thread() { // creating n threads over n channels
@Override
public void run() {
synchronized(r) {
write the message over channel r
received the Ack over channel r
Acks.countDown(); <<< used for decrements
}
}
}
Acks.await(); <<<Master will wait till countDown becomes zero then proceed
你是說所有的線程Acks *都應該被接收,但不是?或者,當倒計時到達零時,無論是否收到確認,您都希望它們關閉? –
是的,我希望他們在倒計時達到零時關閉,無論他們的ack是否已收到... – recovery