Одной строкой я имею в виду самое большее 100 символов на строку.
(Мне в основном нужно это для поддержания программы. Основной поток регистрирует слушателей обратного вызова, которые выполняются в отдельных потоках. Мне просто нужен основной, чтобы зависнуть навсегда и позволить другим потокам сделать свою работу),
Есть несколько вещей, которые можно сделать лучше, чем вечное зависание начального потока:
otherThread.join()
. Это приведет к тому, что текущий поток, в котором вы работаете, будет спать, пока другой поток не закончит выполнение. otherThread.setDaemon(false)
и просто позвольте вашему начальному потоку выйти. Это установит ваши новые потоки как пользовательские. Java не выключится, пока единственными работающими потоками будут потоки-демоны. synchronized(this) {
while (true) {
this.wait();
}
}
(спасибо Карлосу Хойбергеру. Обработка исключений в приведенном выше коде опущена)
Это заставит текущий поток ждать на мониторе текущего класса, пока кто-то не вызовет notify ()
, или навсегда.
Thread.sleep (Long.MAX_VALUE);
Хорошо, это не навсегда, но поговорим о действительно долгом времени :)
Используйте исполнителя. Используя метод shutdown(), вы заставите исполнителя ждать, пока все потоки не завершат работу.
С помощью CountDownLatch вы можете подождать, пока обратный отсчет не достигнет 0, если вы убедитесь, что обратный отсчет никогда не идет, возможно только когда ему нужно закончить. (Это также приводит к 0% cpu, противоположность циклам, которые будут выполняться вечно, и с join () ваше приложение все равно завершится, когда все другие потоки будут завершены, вариант исполнителя лучше, но также завершится, когда все выполненные задачи закончили)
Вы можете использовать thread.join для ожидания всех потоков.
public static void main(String[] args) {
Thread t = new Thread() {
@Override
public void run() {
try {
while (true) {
Thread.sleep(1000);
}
} catch (InterruptedException e) {
}
}
};
t.setDaemon(false);
t.start();
}
for(;;);
Но очень маловероятно, что подвешивание нити - это то, что вам нужно. Вместо этого вам стоит рассмотреть такие варианты, как присоединение к другим нитям.