У нас есть два потока J1 и J2. Как мы можем убедиться, что поток J2 запускается только после завершения выполнения J1 без использования метода join()
.Без использования Thread.Join(), как я могу получить такую же функциональность
ответ
Я думаю, что это очень близко к тому, что делает Thread.join
public class Test1 {
public static void main(String[] args) throws Exception {
Thread t = new Thread();
synchronized (t) {
t.start();
while (t.isAlive()) {
t.wait();
}
}
}
}
внимание магия - что-то просыпается t.wait() - это потому, что JVM уведомляет объект Thread, когда он завершает
Мне очень нравится это решение. Однако я предпочел бы использовать метод «Lock» и «Condition». –
Если вам понравилось первое решение, то см. Второе, это действительно то, как работают соединения –
Ха-ха, +1. Если вы не можете использовать метод Thread.join, скопируйте его в свой собственный метод. –
Простой, используйте CountDownLatch
.
Инициализировать CountDownLatch
до 1 в main()
. Передайте его как J1, так и J2. J2 просто ждет, когда защелка станет 0, используя await()
. J2 устанавливает его в 0, как только это делается, используя countDown()
, сигнализируя, что J1 запускается.
Это решение имеет то преимущество, что даже если вы не можете использовать '.join()' (когда другой поток больше работы, которую нужно выполнить после синхронизации обоих потоков и, следовательно, не будет завершено). Вы можете использовать его вместо «.join()» и где '.join()' не является опцией. – dimo414
+1 предпочтительный подход с использованием нового API параллелизма – ajduke
Другой способ для достижения этой цели является использование Locks
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}
}
}
- 1. Как получить такую же функциональность как ISNULL in LINQ query
- 2. Как я могу получить тему SublimeText, такую же, как codepen.io
- 3. Как я могу реализовать функциональность, такую как программа?
- 4. Как использовать функциональность, такую же, как «-webkit-appearance» в firefox?
- 5. Как я могу создать такую кнопку?
- 6. Как создать функциональность тегов на форуме, такую же, как stackoverflow?
- 7. C указатели: имеют ли они такую же функциональность?
- 8. Как получить функциональность в системном лотке БЕЗ использования NotifyIcon.ContextMenu?
- 9. такая же функциональность, но без использования продолжения и разрыва?
- 10. обратного использования Thread.join() в Java
- 11. как же я получаю такую ошибку
- 12. Do __proto__ и Object.getPrototype демонстрируют точно такую же функциональность?
- 13. Как я могу получить эту информацию, такую как mapbox?
- 14. Как я могу «вернуться» без использования Response.Redirect
- 15. Как получить функциональность Autocomplete без управления
- 16. Как я могу исправить такую ошибку
- 17. Могу ли я добавить функцию контроля взгляда, такую как youtube в Android VR, без использования Unity?
- 18. Как я могу получить количество каналов аудиофайла без использования decodeAudioData()?
- 19. Как я могу получить значение вне foreach без использования массива?
- 20. Как я могу получить домен URL без использования HttpContext.Current
- 21. как я могу получить значение из представления без использования ids?
- 22. Как я могу использовать функциональность TextToSpeech без какого-либо интерфейса?
- 23. как я могу создать такую форму?
- 24. Как я могу исправить такую ошибку?
- 25. Как я могу создать такую карту?
- 26. Могу ли я получить полную функциональность полного Python без ArcGIS для скрипирования ГИС?
- 27. Как я могу дублировать функциональность пользовательского интерфейса Google Fastflip?
- 28. Как я могу получить тот же drawerLayout для нескольких типов действий без использования фрагментов?
- 29. же функциональность, мы можем получить его без написания функцию filteredMessages
- 30. Неверно использовать функцию eval() в этой функции? Могу ли я выполнить ту же функциональность без нее?
почему вы не хотите использовать '.join'? – Alnitak
Посмотрите на ['java.util.concurrent.Exchanger'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html). –
Вы можете использовать синхронизатор 'java.util.concurrent': CountDownLatch, Семафор, Lock, это зависит от вашего usecase. – dcernahoschi