Разница между wait (долгий тайм-аут) и join (длинный миллис)?

Оба метода wait () и join () при вызове потоком 1 в потоке 2 заставляют поток-1 ждать потока-2 либо на некоторое время, либо до тех пор, пока thread-2 завершается.

Если мы используем перегруженные версии этих методов, то есть ожидание (долгий тайм-аут) и соединение (длинный миллисекунд), то

  1. В случае ожидания (долгий тайм-аут) поток-1 станет запускаемым посредством уведомления (или notifyall) или даже тайм-аут (в зависимости от того, что наступит раньше).

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

Так в чем же тогда разница между этими двумя реализациями?

Вот некоторые, о которых я подумал: -

  1. Для wait () нам нужна блокировка объекта, которого мы ждем. Для join () это не нужно.
  2. После выполнения wait () поток снимает полученную блокировку и повторно получает блокировку, как только он снова становится запущенным. Но как насчет присоединения? Снимает ли поток блокировку после выполнения соединения, если оно было выполнено из синхронизированного блока (или метода)?
5
задан whitehat 11 January 2012 в 11:48
поделиться