最近在看《Java高并发程序设计》这本书,了解一些并发相关的概念,分享一下自己的理解
同步:方法调用一旦开始,方法调用者必须等待结果返回后,才能继续执行后续行为
例子:老师上课提问小明同学,要求小明同学立即给予解答,这时老师对小明就是同步操作,老师需要等待小明给予解答,才能继续后续工作
异步:方法调用一旦开始,方法调用就会立即返回,调用者可以继续后续操作。真正方法执行会另起一个线程执行。整个过程,不会阻碍方法调用者的工作
例子:老师下课前向学生布置晚上的家庭作业,老师到第二天上班时,检车同学的作业即可,而不需要一直等待学生完成家庭作业才能下班。这就属于异步
并发:多个任务"交替"执行,多个任务执行可能出现串行。
cpu执行时,若只有一个cpu,多个任务之间就会交替执行,这种情况下就是并发
并行:真正意义上的"并发"执行
cpu执行时,若有多个cpu,多个任务之间就不会交替执行,而是一起执行,这种情况下就是并行
临界区:公共资源可以被多个线程使用,但是每一次,只有一个线程可以使用它,一旦被占用,其他线程想要使用,只能等待
例子:家里只有一个电视,妈妈想看综艺节目,爸爸想看体育节目,我想看动画片,但是电视只能播放一个节目,妈妈正在看综艺节目,我和爸爸只能等妈妈看完才能看自己想看的节目。 电视就是公共资源
同步:方法调用一旦开始,方法调用者必须等待结果返回后,才能继续执行后续行为
例子:老师上课提问小明同学,要求小明同学立即给予解答,这时老师对小明就是同步操作,老师需要等待小明给予解答,才能继续后续工作
异步:方法调用一旦开始,方法调用就会立即返回,调用者可以继续后续操作。真正方法执行会另起一个线程执行。整个过程,不会阻碍方法调用者的工作
例子:老师下课前向学生布置晚上的家庭作业,老师到第二天上班时,检车同学的作业即可,而不需要一直等待学生完成家庭作业才能下班。这就属于异步
并发:多个任务"交替"执行,多个任务执行可能出现串行。
cpu执行时,若只有一个cpu,多个任务之间就会交替执行,这种情况下就是并发
并行:真正意义上的"并发"执行
cpu执行时,若有多个cpu,多个任务之间就不会交替执行,而是一起执行,这种情况下就是并行
临界区:公共资源可以被多个线程使用,但是每一次,只有一个线程可以使用它,一旦被占用,其他线程想要使用,只能等待
例子:家里只有一个电视,妈妈想看综艺节目,爸爸想看体育节目,我想看动画片,但是电视只能播放一个节目,妈妈正在看综艺节目,我和爸爸只能等妈妈看完才能看自己想看的节目。 电视就是公共资源