同步-异步、阻塞-非阻塞 易混淆的概念理解

in TCEHJava with 0 comment

概念 

同步  

A调用B,A等待B处理直到获得结果。

需要调用者一直等待和确认调用结果是否返回,然后继续往下执行。 

异步  

A调用B,A无需等待结果,B通过状态通知A或回调函数来处理。

调用结果返回时,会以消息或回调的方式通知调用者。  

阻塞  

A调用B,A被挂起直到B返回结果给A,才能继续执行。  

调用结果返回前,当前线程挂起不能够处理其他任务,一直等待调用结果返回。  

非阻塞  

A调用B,A不会被挂起,A可以执行其他操作。  

调用结果返回前,当前线程不挂起,可以处理其他任务。

例子

故事:老王烧开水。

出场人物:老王,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

老王想了想,有好几种等待方式

1、老王用水壶煮水,并且站在那里,不管水开没开,每隔一定时间看看水开了没。不做其他事情。-同步阻塞;

老王想了想,这种方法不够聪明。

2、老王还是用水壶煮水,不再傻傻的站在那里看水开,跑去寝室上网,但是还是会每隔一段时间过来看看水开了没有,水没有开就走人。-同步非阻塞

老王想了想,现在的方法聪明了些,但是还是不够好。

3、老王这次使用高大上的响水壶来煮水,站在那里,但是不会再每隔一段时间去看水开,而是等水开了,水壶会自动的通知他。-异步阻塞

老王想了想,不会呀,既然水壶可以通知我,那我为什么还要傻傻的站在那里等呢,嗯,得换个方法。

4、老王还是使用响水壶煮水,跑到客厅上网去,等着响水壶自己把水煮熟了以后通知他。-异步非阻塞

老王豁然,这下感觉轻松了很多。

两者区别  

同步异步是个操作方式,阻塞非阻塞是线程的一种状态。  

同步异步指的是被调用者结果返回时通知线程的一种机制,阻塞非阻塞指的是调用结果返回进程前的状态,是挂起还是继续处理其他任务。

BlockingQueue(阻塞队列接口)
ConcurrentLinkedQueue(非阻塞队列)
具体源码分析,可在本站搜索

Comments are closed.