同步和異步的區(qū)別:
A調(diào)用B方法,如果B是同步的猪腕,需要等到B執(zhí)行結(jié)束之后再返回通知A;而如果B是異步的钦勘,B立刻返回,等B執(zhí)行結(jié)束之后再通過回調(diào)通知A腐缤。
阻塞和非阻塞的區(qū)別:
A調(diào)用B方法肛响,如果是阻塞的,A需要一直等待B結(jié)束不能做別的事情;如果非阻塞剃浇,在B執(zhí)行過程當(dāng)中A可以接著去做別的事情猎物。
同步異步的核心在于被調(diào)用方B是否立刻返回,與調(diào)用方A沒有關(guān)系淘讥。
而阻塞非阻塞的核心在于調(diào)用法A在B執(zhí)行期間是否可以去做別的事情堤如。
因此同步和阻塞 異步和非阻塞是不一樣的窒朋,他們描述的主體都不一樣蝗岖。
同步也可以是非阻塞的,比如在A調(diào)用B時拭宁,A可以接著做別的事情(非阻塞)瓣俯,但是B結(jié)束之后不會主動通知A(同步);
異步可以是阻塞的彩匕,A調(diào)用B時媒区,A不可以去做其他事情,B立刻返回绪爸,等B結(jié)束之后在通知A。
因此最好的方式是異步非阻塞奠货,A調(diào)用B時可以接著去做別的事情座掘,等B結(jié)束之后再通知A。
Java中提供了三種I/O方式:
BIO(Blocking I/O):同步阻塞
NIO(New I/O):同步非阻塞萍虽,通過線程不斷論詢的方式判斷I/O是否結(jié)束
AIO:異步非阻塞形真。