Прежде всего я искал ответ навсегда. Таким образом, я пытаюсь присоединиться ко всем моим темам:
Set<Thread> threads = Thread.getAllStackTraces().keySet();
try {
for (Thread t : threads)
if(t!=Thread.currentThread())
t.join(5*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Но я застреваю в бесконечном цикле? Я вижу, что потоки заканчиваются, когда я отлаживаю то, что происходит?
Я также пробовал:
Set<Thread> threads = Thread.getAllStackTraces().keySet();
try {
for (Thread t : threads)
if(!t.toString().contains("main") || !t.toString().contains("system"))
t.join(5*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
и я получаю те же результаты. помощь будет оценена :)
Вы ожидаете, что потоки погибнут, которые являются частью JVM, но вы неправильно указали свою логику. Все потоки будут соответствовать условию "не содержит основную или не содержит системы", если только оно не содержит как двух слов. Попробуйте вместо этого использовать &&
:
if(!t.toString().contains("main") && !t.toString().contains("system"))
Используя &&
, мой процесс существует быстро.
Если вы ожидаете, что потоки умрут, сохраните свой собственный список потоков, которые запускаются в вашей программе, и дождитесь их смерти. Не Thread.getAllStackTraces
список из Thread.getAllStackTraces
, потому что он будет содержать другие потоки, которые вы не запустили и не умрете первым.