1.老王烧开水的例子
(1).同步阻塞
老王用水壶烧水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。

(2).同步非阻塞
老王想了想,这种方法不够聪明。还是用水壶烧水,不再傻傻的站在那里看水开,而是去去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就继续会房间上网。

(3).异步阻塞
老王想了想,现在的方法聪明了些,但是还是不够好。老王这次使用高大上的响水壶来烧水,站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。

(4).异步非阻塞
老王想了想,不会呀,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢。于是老王还是使用响水壶煮水,跑到客厅上网去,等着响水壶自己把水烧开了以后通知他。

2.同步

同步和异步是站在被调用者角度提出的,而阻塞和非阻塞是站在调用者调度提出的。同步可以理解为发出一个请求之后,一直在等待被调用者的响应,这时调用者是处于阻塞的,只有接收到被调用者的响应后才往下执行其它请求。同步在一定程度上可以看做是单线程,这个线程请求一个方法后就等这个方法给他回复,否则不往下执行。其请求示意图如下所示。

并发编程之同步、异步、阻塞和非阻塞_非阻塞

2.异步

异步指发出请求后,不必阻塞性地等待被调用者的响应,只需要向系统委托一个异步过程,那么当被调用者处理完请求后自动触发委托的异步过程,从而完成一个完整的流程。异步在一定程度上可以看做是多线程的,发出一个请求后无需等待响应结果,继续执行其它方法。其请求示意图如下所示。

并发编程之同步、异步、阻塞和非阻塞_非阻塞_02