我想在spring应用程序中运行一个线程
@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 :(得分:4)
默认情况下,spring bean是单例,但Thread run
方法只运行一次。之后,它被认为处于与RUNNABLE不同的状态。
因此,您需要每次都创建一个新对象,并且可以使用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