Java 如何在Springbean中启动线程
我想在spring应用程序中运行一个线程Java 如何在Springbean中启动线程,java,multithreading,spring-mvc,dependency-injection,autowired,Java,Multithreading,Spring Mvc,Dependency Injection,Autowired,我想在spring应用程序中运行一个线程 @Component public class MyServiceCreationListener { public void startThread() { Thread t = new Thread(new MyThread()); t.start(); } } 这里我使用了threadt=newthread(newmythread())
@Component
public class MyServiceCreationListener {
public void startThread() {
Thread t = new Thread(new MyThread());
t.start();
}
}
这里我使用了threadt=newthread(newmythread())代码>这是错误的方式
请为此提供解决方案,让spring像Springbean一样管理MyThread,这样我们就可以将它自动连接到其他bean中,并通过调用start()
方法来访问它
这是线程类
@Component
public class MyThread implements Runnable {
public void run() {
System.out.println("Inside run()");
}
}
默认情况下,Springbean是单例的,但线程的run
方法只运行一次。之后,它将被视为处于与RUNNABLE不同的状态
因此,您每次都需要创建一个新对象,您可以使用prototype
scope和
扩展线程
:
@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();
}
}
@组件
公共类MyServiceCreationListener{
@自动连线
ObjectFactory和ReadFactory;
public void startThread(){
myThreadFactory.getObject().start();
}
}
这段代码还没有经过测试,它只是让你有一个想法
您可以在这里找到一些示例:什么是“通过调用start()方法我们可以访问它”确切的意思?这里提供的解决方案不适用于您@bowmore意味着我想使用start()方法调用该线程。。。对不起,我的英语是:(你想让每个被注入线程的客户端调用start()?那是行不通的。不是由每个客户端调用,而是…无论如何,我想在bean@Autowiredprivate MyThread;将自动连线成功吗?如果您的配置良好,它将成功。现在查看。