Simple Thread以Daemon线程开始

时间:2017-07-21 06:28:31

标签: java spring

我在使用Spring InitializingBean启动服务器时创建了一个简单的线程,但是作为守护程序线程启动,为什么它作为守护程序线程启动,并且在应用程序中长期运行会出现任何问题。或者我可以通过setDaemon(false)启动帖子,请建议。

public class Update implements InitializingBean {
    @Autowired
    Service service
    public void afterPropertiesSet() throws Exception {
        String hostname = Util.getServerName();
        service.updateStatus(hostName);
        Thread t1=new Thread(new UpdateService(service));
        t1.start();     
    }
}

2 个答案:

答案 0 :(得分:0)

如果启动主线程(非守护程序线程),则在该线程执行完毕之前,JVM不会退出。因此,如果您使用Thread.setDaemon(false);,则必须确保在处置ApplicationContext时正确处置线程。您可以使用DisposableBean接口destroy()方法来实现此目的。

或者您只需使用守护程序线程。

答案 1 :(得分:0)

守护程序线程是一个线程,它在程序完成但线程仍在运行时不会阻止JVM退出。守护程序线程的一个示例是垃圾收集。

您可以使用setDaemon(boolean)方法在线程启动之前更改Thread守护程序属性。 例如:

DaemonThread t = new DaemonThread();
        t.setDaemon(false);