【发布时间】:2015-11-25 22:17:01
【问题描述】:
我有一个 java 程序,它打印出主程序的最后一条语句并挂起。我想知道什么可能导致这个问题谢谢。
public static void main(String[] args) {
...
...
JSch jsch=new JSch();
try {
jsch.addIdentity("xxx");
session = jsch.getSession("centos", this.ip, 22);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
...
...
System.out.println("end of test");
}
程序打印“测试结束”并挂起。什么可能导致这个问题?我没有使用任何框架。 我在linux机器上编译并运行它。打印“测试结束”后,linux提示“>”不显示
从 ps 命令,我看到进程正在运行。
我发现了问题。会话连接不会断开连接。但为什么它会阻塞出口? 如果我错了,请纠正我。主线程内没有加入或等待。主线程会被阻塞吗?
回答: 在斯蒂芬 C 的帮助下, 最后,我找到了原因。在 c++ 中,所有线程在主线程退出后终止,但在 java 中,JVM 等待所有非守护线程完成。我将我的 c++ 知识应用于 Java,但在这种情况下它们是不同的。
【问题讨论】:
-
那些
...点可能隐藏了一些关键代码。请发布您的minimal reproducible example。 -
某事使您的程序挂起,而且不是打印语句,因此您需要提供有关您的代码的更多信息才能获得帮助。
-
"程序打印“测试结束”并挂起"你确定它挂起吗?也许它只是结束了?或者,也许您创建了一些额外的线程,但尚未结束阻止您的应用退出。
-
挂起是什么意思?您是从命令行命令提示符运行它吗?请改进问题。您是否尝试过剥离其余代码并运行您在此处显示的内容?简化版还挂着吗?
-
那么,你会向我们展示足够多的代码来让我们回答这个问题吗?还是要删除问题?这真的是一个或另一个。