Блокировки в основном методе (или из любого другого потока) следует избегать. Проблема, с которой вы сталкиваетесь - как создать некоторые потоки и поддерживать работу JVM до тех пор, пока эти потоки не завершатся sh, - может быть решена лучшими способами.
Если вы создадите новый Thread
и позвоните setDaemon (false) , тогда вам не нужно ничего делать со сном или ожиданием. Установив, что поток не является демоном, JVM будет работать до тех пор, пока этот поток не завершится. Из Javado c:
Виртуальная машина Java завершает работу, когда все запущенные потоки - все потоки демона.
Вот пример класса потока, который пытается спать в течение 2 секунд, затем выводит сообщение:
class ExampleThread extends Thread {
@Override
public void run() {
try {
sleep(2000);
System.out.println("done sleeping");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Если вы называете это так - установив daemon в false - вы сначала увидите вывод thread started
, затем 2 секунды ничего, затем output done sleeping
.
public static void main(String[] args) {
ExampleThread t = new ExampleThread();
t.setDaemon(false);
t.start();
System.out.println("thread started");
}
Если вы замените t.setDaemon(false)
на этот t.setDaemon(true)
- так, чтобы новый поток был фактически потоком демона - тогда вы увидите вывод thread started
, за которым следует непосредственная JVM завершение.