同步,异步和多线程
许多人有一个误区:异步和多线程是一件事情。其实不是。我们用一个生活中的例子来解释一下三者的差别。
假如你现在有三件家务需要做:1. 煎鸡蛋, 2. 煮开水,3. 打扫客厅
- 同步:你开始煎鸡蛋,等鸡蛋煎完,再去煮开水,开水煮完再去打扫客厅。你得先做完一件事,才会开始做下一件事情,这就是同步;
- 异步:你把鸡蛋丢进锅了,设置了一个闹钟,就去煮开水了。同样,你在开水这边也设置了一个闹钟,就去打扫卫生了。等闹钟响了,你再去处理鸡蛋或开水;
- 多线程:你雇了两个工人,一个帮你煎鸡蛋,你个帮你煮开水,你自己打扫卫生。
阻塞和非阻塞
你现在去书店买书,你问老板:有没有《Java concurrency in partice》?老板开始寻找。
- 阻塞:你什么事都不干,就等老板找完告诉你;
- 非阻塞:你去干其他事情,但是隔一定的时间就会回来问一下找到没有。
参考:
- https://stackoverflow.com/questions/2625493/asynchronous-vs-non-blocking
- https://stackoverflow.com/questions/34680985/what-is-the-difference-between-asynchronous-programming-and-multithreading?noredirect=1&lq=1