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

时间:2017-02-21 22:58:30

标签: java spring multithreading

我有一位经理,我有userDao,由

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

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

new MyThread(userDao).start();

安全吗?还是可能的?如果不是,我该怎么做?

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

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

注释函数

调用该函数时请记住以下内容:

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

这种方法鼓励你思考你的班级结构,并鼓励你。例如,在失败的情况下,您可能还想用@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
    }
}

但这是更多的代码。