使用@Async调用方法与在新线程中调用方法

时间:2018-09-06 07:47:07

标签: java multithreading asynchronous

我应该选择哪个?我可以用@Async注释Java函数,也可以在new Thread中调用该函数,例如像这样的Java 8

new Thread(() -> {
            myfunction("Test");
        }).start();

这两种方式之间有区别吗? 预先感谢。

1 个答案:

答案 0 :(得分:1)

根据文档https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableAsync.html

  

默认情况下,Spring将搜索关联的线程池   定义:上下文中的唯一TaskExecutor bean或   执行器bean否则命名为“ taskExecutor”。如果两者都不是   可解决的,将使用SimpleAsyncTaskExecutor处理异步   方法调用。

相似性:

您的示例和@Async都相似,因为它们可以在单独的线程中执行

差异:

区别在于,使用@Async注释Bean的方法将使其在单独线程中执行,而该线程是从线程池提供的,而不是直接在就像您的情况一样。