同步和异步的区别:
A调用B方法,如果B是同步的,需要等到B执行结束之后再返回通知A;而如果B是异步的,B立刻返回,等B执行结束之后再通过回调通知A。
阻塞和非阻塞的区别:
A调用B方法,如果是阻塞的,A需要一直等待B结束不能做别的事情;如果非阻塞,在B执行过程当中A可以接着去做别的事情。
同步异步的核心在于被调用方B是否立刻返回,与调用方A没有关系。
而阻塞非阻塞的核心在于调用法A在B执行期间是否可以去做别的事情。
因此同步和阻塞 异步和非阻塞是不一样的,他们描述的主体都不一样。
同步也可以是非阻塞的,比如在A调用B时,A可以接着做别的事情(非阻塞),但是B结束之后不会主动通知A(同步);
异步可以是阻塞的,A调用B时,A不可以去做其他事情,B立刻返回,等B结束之后在通知A。
因此最好的方式是异步非阻塞,A调用B时可以接着去做别的事情,等B结束之后再通知A。
Java中提供了三种I/O方式:
BIO(Blocking I/O):同步阻塞
NIO(New I/O):同步非阻塞,通过线程不断论询的方式判断I/O是否结束
AIO:异步非阻塞。
网友评论