2015-03-02 17 views
1

請幫助解決問題。我有一個像下面的代碼一樣的線程。如何啓動彈簧容器內的螺紋

public class A implements Runnable { 

    public void run() { 
    while(true) { 
    //Do something something important 
    } 
    } 

}

我想配置此線程Spring配置文件以這樣的方式,所以,當Spring容器被啓動,線程開始運行。這意味着我必須在類中使用th.start()來啓動線程,但永遠不會使用它。該線程應該在不從容器中實例化任何bean的情況下啓動。它不是計時器任務類型功能。

+0

將這個@PostConstruct下遵循[LINK] [1]的信息 [1]:http://stackoverflow.com/questions/2401489/execute - 方法上起動時,在彈簧 – LynAs 2015-03-02 18:45:13

回答

2
<bean class="java.lang.Thread" init-method="start"> 
    <constructor-arg index="0"> 
     <bean class="A"/> 
    </constructor-arg> 
</bean> 

這將創建並啓動一個線程,使線程成爲一個bean。您可以使用destroy-method="interrupt"在容器停止時停止線程,但更奇特的需要支持代碼。我推薦Guava的AbstractExecutionThreadService

0

創建一個實現ApplicationListener的類,並將其線程啓動邏輯連接到它的oeverridden方法。

實施例:

  public class A implements Runnable { 

        public void run() { 
        while(true) { 
        //Do something something important 
        } 
        } 

      } 
        public class B implements ApplicationListener<ContextRefreshedEvent> { 

         @Override 
         public void onApplicationEvent(ContextRefreshedEvent event) { 
          Thread t = new Thread(new A()); 
          t1.start() 

         } 

        }