Java 多线程系列文章第 4 篇。前端
继续我们的 Java 多线程系列文章,今天再讲讲概念,这篇应该是最后一篇基础概念,接下来就直接进入 Java 多线程主题了,在后面的文章里若是有概念须要单独拿出来说时再补充概念篇。后端
这篇文章主要讲讲阻塞(Blocking)和非阻塞(Non-blocking)。设计模式
之前在学校作项目,基本上都是独立开发,每一个人开发一个部分,以最小化沟通成本的方式划分工做量。到了职场,单纯的以最小化对接成原本安排工做是几乎不可能的,要考虑的因素变多了,各类跨小组、跨部门、甚至跨职场的工做,这就带来了沟通成本以及工做对接的各类阻塞问题。多线程
新人刚入职场的时候,对一切都不熟悉,在作一些小组之外的对接工做时,就会遇到种种问题,特别如今充斥着各类分布式架构,之前开发 Web 后台的同窗要会开发 JSP 页面,而如今先后端都分离了。设想一下这个场景。架构
小明是学习前端出身,刚开始步入职场,作的第一个需求就是登陆和注册界面,须要对接一个写后台的同事小东,小东负责开发登陆和注册的后台逻辑。小明开发了登陆界面,准备和小东对接联调登陆功能,这时小东回复说他恰好有生产 bug 在跟进,还没开发好,这时小明该怎么作?并发
有 2 种作法:异步
干等着小东开发好登陆后台,再和他联调。分布式
开发注册界面,开发过程当中再时刻询问小东登陆后台接口是否作完了,若是小东作完了,再去对接。学习
这 2 种作法的关键区别是什么呢?对于小东来讲,没啥区别,他能作的就是尽可能早点实现他的功能点。主要关注小明,第一种作法,小明作好了登陆界面,接着则等待小东的登陆后台接口,若是小东要开发一下午,那么小明就一下午啥事也不干,这种状况就是阻塞,小明的其余任务由于登陆界面没对接联调,而一直阻塞着;第二种作法,小明得知小东登陆后台接口还没实现,就着手先作注册界面的功能,而后每过一个小时跟小东确认一下登陆后台接口开发是否开发完成,直到小东开发完登陆后台接口,便开始对接联调,这种状况就是非阻塞,登陆界面没对接联调彻底不影响小明的开发进度,能联调的时候就联调,没法联调就完成手头上的其余任务。线程
可能有些同窗初入职场会犯这类错误,作的功能依赖别人,由于别人还没作完,而后就采用第一种作法,一直干等着,直到对方完成后再继续工做。偶尔偷偷懒还行,若是一直是这样的工做状态,对初入职场的同窗没有好处,并且这个被老板知道很很差。若是某一个需求点阻塞了,应该就先作手头上其余工做,若是手头上没其余工做,就跟老板反馈状况后领其余任务作,还要时刻去跟进阻塞的需求点的进度。
下面用流程图来描述这 2 个概念:
看了上面的图,是否是更加理解阻塞与非阻塞了呢?
若是你是老板,或者说是小明的领导,你会让小明怎么作?第一种作法仍是第二种作法呢?有支持第一种作法的,麻烦联系我,大家公司还招人么?
推荐阅读
后台回复『设计模式』能够获取《一故事一设计模式》电子书
以为文章有用帮忙转发&点赞,多谢朋友们!