gpt4 book ai didi

java - 如何在Spring bean中启动一个线程

转载 作者:行者123 更新时间:2023-11-29 08:34:33 26 4
gpt4 key购买 nike

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

    @Component
public class MyServiceCreationListener {


public void startThread() {

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

}
}

我在这里使用了 Thread t = new Thread(new MyThread()); 这是错误的方式。

请为此提供解决方案,以便像 spring bean 一样对 MyThread 进行 spring 管理,以便我们可以将它 Autowiring 到其他 bean 中,并通过调用 start() 方法我们可以访问它

这是线程类

@Component
public class MyThread implements Runnable {

public void run() {

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

}

}

最佳答案

默认情况下,spring bean是单例的,但是Thread的run方法只会运行一次。之后它被认为处于不同于 RUNNABLE 的状态。

LifeCycle of Thread in Java

因此,您每次都需要创建一个新对象,您可以使用prototype 作用域和ObjectFactory 来实现。 .

扩展线程:

@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

关于java - 如何在Spring bean中启动一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45299690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com