我在使用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();
}
}
答案 0 :(得分:0)
如果启动主线程(非守护程序线程),则在该线程执行完毕之前,JVM不会退出。因此,如果您使用Thread.setDaemon(false);
,则必须确保在处置ApplicationContext
时正确处置线程。您可以使用DisposableBean
接口destroy()
方法来实现此目的。
或者您只需使用守护程序线程。
答案 1 :(得分:0)
守护程序线程是一个线程,它在程序完成但线程仍在运行时不会阻止JVM退出。守护程序线程的一个示例是垃圾收集。
您可以使用setDaemon(boolean)方法在线程启动之前更改Thread守护程序属性。 例如:
DaemonThread t = new DaemonThread();
t.setDaemon(false);