suh*_*s_n 3 java multithreading dependency-injection spring-mvc autowired
我想在 spring 应用程序中运行一个线程
@Component
public class MyServiceCreationListener {
public void startThread() {
Thread t = new Thread(new MyThread());
t.start();
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用Thread t = new Thread(new MyThread());这是错误的方式。
请为此提供解决方案,以便像 spring bean 一样 spring 管理 MyThread,以便我们可以将其自动装配到其他 bean 中,并通过调用start()方法我们可以访问它
这是线程类
@Component
public class MyThread implements Runnable {
public void run() {
System.out.println("Inside run()");
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,spring bean 是单例的,但是 Thread 的run方法只会运行一次。之后,它被认为处于与 RUNNABLE 不同的状态。
因此,您每次都需要创建一个新对象,您可以使用prototypescope 和ObjectFactory来做到这一点。
扩展Thread:
@Bean
@Scope("prototype")
public class MyThread implements Runnable {
public void run() {
System.out.println("Inside run()");
}
}
Run Code Online (Sandbox Code Playgroud)
进而:
@Component
public class MyServiceCreationListener {
@Autowired
ObjectFactory<MyThread> myThreadFactory;
public void startThread() {
myThreadFactory.getObject().start();
}
}
Run Code Online (Sandbox Code Playgroud)
此代码未经测试,仅供您参考。
您可以在此处找到一些示例:Spring 和 java 线程
| 归档时间: |
|
| 查看次数: |
8853 次 |
| 最近记录: |