关于 Java 多线程的疑问

2022-01-05 17:18:00 +08:00
 xjngbla
springboot 中的 @Async 注解是多线程还是异步呢
1284 次点击
所在节点    程序员
2 条回复
mineralsalt
2022-01-05 17:21:10 +08:00
当然是异步的, 由线程池管理, 线程池数量可以自己设置, 使用这个的时候要注意函数执行时间, 它不会等函数执行完成
xjngbla
2022-01-05 17:33:58 +08:00
@mineralsalt 在网上找到了这段话,明白了,谢谢

异步与多线程的区别
通过上面的介绍,我们可以看出多线程都是关于功能的并发执行。而异步编程是关于函数之间的非阻塞执行,我们可以将异步应用于单线程或多线程当中。

<b>因此,多线程只是异步编程的一种实现形式。</b>

比如,你和你的朋友决定一起做一顿午餐。“异步”就是你对朋友说:“你去商店买意大利面,回来的时候告诉我一声,然后一起做午餐。在你买意大利面的同时,我去准备番茄酱和饮料。”

而“线程”是:“你烧水,我加热番茄酱。当水烧开了,告诉我,我把意大利放进去。当番茄酱热了,你可以把奶酪添加进去。当两者都完成了,就可以坐下来一起吃晚餐。”在线程的示例中,我们可以看到“When ,Do”的事件顺序,而这些顺序代表着每个人(线程)的指令集集合的顺序。

上述示例可以看出,多线程是与具体的执行者相关的,而异步是与任务相关的。

多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码,可以实现线程间的切换执行。

异步和同步是相对的,异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

多线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

所以本质上,异步和多线程并不是一个同等关系,异步是最终目的,多线程只是实现异步的一种手段。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX