gpt4 book ai didi

java - @Autowired 和线程的陷阱

转载 作者:行者123 更新时间:2023-11-30 04:56:54 25 4
gpt4 key购买 nike

我想知道当我使用原型(prototype)范围 Autowiring 线程时是否应该注意任何问题。

主题:

...
@Service
@Scope("prototype")
public class MyThread extends Thread {
...
}

线程启动类:

...
public class ThreadStarter {

@Autowired
private MyThread myThread;

public void startThread(){
myThread.start();
}
}

起始类将从 Web 服务实现中调用。

我应该考虑哪些陷阱吗?

最佳答案

这实际上取决于线程类实例的作用。

想想 Servlet doGet 和/或 doPost 方法。如果您是无状态的并且不在更广泛的范围(例如 session 或上下文)中保存值,那么您不必担心何时调用 servlet 的哪个实例。但是,如果您是有状态的(例如,将对象获取/放入 session 范围),那么您需要同步该 servlet 实例对所述范围的访问(synchronized(session))或序列化请求的方式由 servlet 线程处理。

我认为您的情况几乎相同。如果您实际上是有状态的并在线程之间共享数据,那么您希望使您的线程实例具有原型(prototype)范围(因此每次需要注入(inject)时都会创建一个新实例),并且您可以将其保留为单例的默认范围,如果该线程的 run() 方法对于其外部的数据而言是无状态的。

关于java - @Autowired 和线程的陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8257880/

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