java nio是jdk1.4新增加的特性,之前的io成为bio,是阻塞式同步io -- blocking,他是面向流的,而nio 意思是非阻塞式同步io -- non-blocking IO 是面向通道channel和缓冲区buffer的。
当然,很多同学也听说过aio 意思是非阻塞异步io -- Asynchronous io ,那么bio,nio,aio他们在模型上有什么区别呢?
我在这里主要想介绍下同步阻塞,同步非阻塞,异步非阻塞之间的区别;
从前听说过一个有意思的例子,他是这么说的:
假设小王去饭店吃饭,
①点完菜,他一直在柜台等厨师做好饭再去回到座位上,这叫同步阻塞;
②点完菜,他回到座位上,玩手机,过一会儿就去柜台,看看厨师是不是做好了饭,这叫同步非阻塞;
③点完菜,他回到座位上,玩手机,等厨师做好了饭给他发微信叫他去取,这叫异步非阻塞。
同步或者异步,是对io事件来说的,阻塞非阻塞式对于执行线程来说的。