У меня многопоточная Java программа. Основной поток выполняет следующий код во втором потоке, после чего второй поток заканчивается.
try{
System.out.println(1); //prints
doSomething();
System.out.println(2); //doesn't print
} catch(Throwable t) {
System.out.println(3); //doesn't print
}
Я запускаю этот код и, в редких случаях, вижу 1
go для консоли, и 2
или 3
отсутствуют. Похоже, что doSomething
выдает какую-то ошибку, чтобы остановить поток. Это происходит примерно в 0,5% случаев. Поскольку это не Throwable
, что приводит к завершению потока, что может происходить?
Основной поток продолжает успешно продолжать работу после остановки второго потока.
Это код Я использую создать и запустить второй поток.
Runnable secondThread = new Runnable() { ... }
ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(1);
threadPoolExecutor.execute(secondThread);
РЕДАКТИРОВАТЬ: doSomething
является вызовом REST
API внешнего веб-сайта.