我在java中有一个多线程代码。
我使用intellij进行调试。我知道如何在线程之间切换调试上下文。
然而,控制台只显示主线程抛出的异常。
我怎样才能看到从任何线程抛出的异常?
基本上当我使用Executor运行集成测试时,会从辅助线程抛出一些异常。
但是没有任何内容打印到调试控制台。
实际上代码过得很快,而且从来没有达到我的尝试。
在抛出异常的代码
后,我无法继续下一步try {
while (true) {
logger.debug("New thread. polling on DB, polling on deployment service");
ConfigAction configAction = configActionFactory.get(ConfigActionsEnum.PushToDeployment);
while (configAction != null) {
configAction = configAction.execute() ? configAction.nextActivity() : null;
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error("DeploymentContextListener run failed", e);
}
当我使用主线程运行相同的代码时,我看到了异常:
public void run() {
try {
while (true) {
logger.debug("New thread. polling on DB, polling on deployment service");
ConfigAction configAction = configActionFactory.get(ConfigActionsEnum.PushToDeployment);
while (configAction != null) {
configAction = configAction.execute() ? configAction.nextActivity() : null;
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error("DeploymentContextListener run failed", e);
}
它写在我有的一个try-catch中
} catch (Exception ex) {
logger.error("failed to get from DB: getLatestConfigVersionWaitingForDeploy", ex);
}
答案 0 :(得分:0)
我的问题是我用过:
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> { }
从我读过的内容:
invokeAll - 调用“future.get()”。等待所有线程完成。
提交 - >将错误附加到Future对象,而不是std-error
执行 - >错误被抛到std-error