gpt4 book ai didi

java - Spring中如何将dao对象发送到新线程

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:36 25 4
gpt4 key购买 nike

我有一些管理器,其中有 userDao,它由

设置
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

我想在管理器中启动新线程并在构造函数中传递此 dao。像这样:

new MyThread(userDao).start();

安全吗?或者可能吗?如果没有,我该怎么做?

谢谢您的回复。

最佳答案

创建一个接受 DAO 作为参数的函数。使用@Aysnc注释该函数

调用该函数时请记住以下几点:

  • 当您从同一个类中调用异步带注释的函数时,该调用将是同步的(这与代理对象有关)
  • 异步方法不会参与与调用者相同的事务上下文

这种方法鼓励您思考您的类(class)结构,并且值得鼓励。例如,在失败的情况下,您可能还想用 @Retryable 包装它。

当然,你也可以做类似的事情

ExecutorService executorService = Executors.newFixedThreadPool(3);
MyWorker worker = new MyWorker(UserDao userDao);
executorService.submit(worker);

private class MyWorker implements Callable {
private UserDao userDao
MyWorker(UserDao userDao){
this.userDao = userDao;
}

public void call() {
.. do something
}
}

但是代码要多得多。

关于java - Spring中如何将dao对象发送到新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42379608/

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