Java 这根线怎么会在春天一直走?

Java 这根线怎么会在春天一直走?,java,multithreading,spring,Java,Multithreading,Spring,我可以在我的遗留应用程序中看到下面的代码。一旦我运行了main方法,我发现这个线程一直在运行。 但是在调试时,为什么线程永远运行 import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyClass {

我可以在我的遗留应用程序中看到下面的代码。一旦我运行了
main
方法,我发现这个线程一直在运行。 但是在调试时,为什么线程永远运行

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyClass {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(ResourcesFactoryApplicationContext.getInstance());
        applicationContext.registerShutdownHook();
        applicationContext.setAllowBeanDefinitionOverriding(false);
        applicationContext.setConfigLocation("configFileName");
        applicationContext.refresh();
    }

}

进程保持运行的原因是有非守护进程线程仍在运行。根据您的代码,主线程必须已终止,因此应用程序必须已在其中一个bean中启动其他线程

一些比我更了解Spring的人可能会马上回答这个问题,因此这可能是一个愚蠢的请求,但是您能发布调试器中显示的正在运行的线程的堆栈跟踪吗?您确定所讨论的线程是带有
main()
的线程吗,不是由某个Spring Bean启动的其他线程?如果不是deamon线程,则每个线程都将永远运行。更具体地说,如果线程不是守护进程,则它将一直运行,直到达到其Runnable的run方法的末尾。如果它的Runnable被编码为永远不会到达run方法的末尾,那么它将一直运行,直到有人终止进程。不管怎样,什么样的线程永远运行?这个片段再现了这个问题吗?请包括跟踪记录。