0

啓動一個線程我想在春天應用如何在Spring bean的

@Component 
    public class MyServiceCreationListener { 


     public void startThread() { 

      Thread t = new Thread(new MyThread()); 
      t.start(); 

     } 
    } 

這裏運行一個線程,我用Thread t = new Thread(new MyThread());這是走錯了路。

請這個春天管理MyThread的像一個Spring bean提供的解決方案,所以我們可以自動裝配成其他bean,並通過調用start()方法,我們可以訪問它

下面是Thread類

@Component 
public class MyThread implements Runnable { 

    public void run() { 

     System.out.println("Inside run()"); 

    } 

} 
+0

是什麼「並通過調用我們可以訪問它的start()方法」意味着什麼? – bowmore

+0

提供的解決方案在這裏不適合你https://stackoverflow.com/questions/45297652/spring-not-injecting-a-bean-into-thread/45299022?noredirect=1#comment77559847_45299022 –

+0

@bowmore意味着我想打電話給線程使用開始()mehod ...對不起,我的英語:( –

回答

3

通過默認情況下,spring beans是singleton,但Thread的run方法只會運行一次。之後,它被視爲與RUNNABLE不同的狀態。

LifeCycle of Thread in Java

所以,你需要創建一個新的對象,每次和你能做到這一點使用prototype範圍和ObjectFactory

擴展Thread

@Bean 
@Scope("prototype") 
public class MyThread implements Runnable { 

    public void run() { 

     System.out.println("Inside run()"); 

    } 
} 

然後:

@Component 
public class MyServiceCreationListener { 

    @Autowired 
    ObjectFactory<MyThread> myThreadFactory; 

    public void startThread() { 
     myThreadFactory.getObject().start(); 
    } 
} 

此代碼沒有經過測試,它只是給你拿個主意。

你可以在這裏找到一些例子:Spring and java threads

+0

@Autowired私有MyThread myThread; 將自動成功的線路?? –

+0

如果你的配置是好的,它會。 – alfcope

+0

嘿它不炒鍋.. bdw謝謝!:) –