2017-07-21 61 views
0

當服務器啓動時使用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

不,線程作爲守護線程啓動並運行。當我設置** t1.setDaemon(false); **它開始作爲一個正常的線程。 – user3539665

回答

0

如果您啓動主線程(非守護線程),那麼JVM將不會退出,直到該線程完成執行。因此,如果您使用Thread.setDaemon(false);,則必須確保在處置ApplicationContext時正確處置線程。您可以使用DisposableBean界面destroy()方法來實現此目的。

或者你可以簡單地使用守護線程。

0

守護進程線程是一種線程,它不會阻止JVM在程序完成時退出,但線程仍在運行。守護線程的一個例子就是垃圾收集。

您可以使用setDaemon(boolean)方法在線程啓動之前更改線程守護程序屬性。 例如:

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