Ожидание на нескольких потоках для завершения в Java

Светодиод должен не обязательно быть освещен, чтобы NIC слушал WOL, это - распространенное заблуждение. Это зависит от NIC. У меня есть Windows PC, где светодиод LAN отсутствует даже при том, что WOL работает на него. Кроме того, поиск подключенных устройств в i/f маршрутизатора не мог бы показать правдиво, если NIC прислушивается к WOL или нет. У меня есть ПК, который не видим в i/f маршрутизатора, когда во сне, но WOL работает. Так, в целом, я не думаю, что существует любой хороший способ проверить, слушает ли NIC или полностью закрытие.

я отправил свою проблему & расследование здесь, это могла быть та же проблема: След на LAN не работал 3 раза затем больше

, Мое основное право подозрения теперь состоит в том, что эта проблема происходит для пользователей RTL8111 с Ubuntu 12.04.

существует также на самом деле другая версия RTL8111, кто знает, относится ли это ко всем, и я не знаю то, что различия между 8111C, 8168B, 8169 и т.д., они используют тот же драйвер на Linux. На сайте Realtek тот же драйвер используется для следующего NICs:

RTL8111B/RTL8168B/RTL8111/RTL8168 - RTL8111C/RTL8111CP/RTL8111D (L) - RTL8168C/RTL8111DP/RTL8111E - RTL8168E/RTL8111F/RTL8411

и другой драйвер для следующего NICs:

RTL8110SC (L) (RTL8110S/RTL8110SB (L)/RTL8169SB (L)/RTL8169S (L)/RTL8169)

Не позволенный больше отправлять ссылки.. :-/

, Если Вы хотите купить другой NIC, я предлагаю не-Realtek i e любой процессор Intel.

Обновление: Я протестировал еще немного для понимания, какова проблема. Мои основные теории на данный момент площадь: система Ubuntu закрывает питание NIC в дежурном режиме, и/или драйвер Realtek RTL8111 для 64-разрядных машин не работает. См. ссылку на мой поток для деталей.

BTW я не получаю этот форум.. Я отправляю ответ, и другие обсуждают хотя не позволенный?! И мне разрешают изменить исходное сообщение, но не могу добавить комментарий!

35
задан Saurin 24 November 2013 в 00:03
поделиться

4 ответа

Просто присоединяйтесь к ним один за другим:

for (Thread thread : threads) {
  thread.join();
}

(Вам нужно будет что-то сделать с InterruptedException , и вы, возможно, захотите предоставить тайм-аут на случай все идет не так, но это основная идея ...)

59
ответ дан 27 November 2019 в 06:40
поделиться

Определите служебный метод (или методы) самостоятельно:

public static waitFor(Collection<? extends Thread) c) throws InterruptedException {
    for(Thread t : c) t.join();
}

Или у вас может быть массив

public static waitFor(Thread[] ts) throws InterruptedException {
    waitFor(Arrays.asList(ts));
}

В качестве альтернативы вы можете посмотреть, используя CyclicBarrier в ] java.util.concurrent библиотека для реализации произвольной точки рандеву между несколькими потоками.

8
ответ дан 27 November 2019 в 06:40
поделиться

Если вы используете java 1.5 или выше, вы можете попробовать CyclicBarrier . Вы можете передать операцию очистки в качестве параметра конструктора и просто вызвать барьер.await () для всех потоков, когда есть необходимость в очистке.

14
ответ дан 27 November 2019 в 06:40
поделиться

Вы видели классы Executor в java.util.concurrent ? Вы можете запускать ваши потоки через ExecutorService . Это дает вам единственный объект, который вы можете использовать для отмены потоков или ожидания их завершения.

9
ответ дан 27 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: