Java 如何在Springbean中启动线程

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())

我想在spring应用程序中运行一个线程

    @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;将自动连线成功吗?如果您的配置良好,它将成功。现在查看。