【Java 并发】易混淆的KeyWords

来源:互联网 发布:ubuntu 启动器 图标 编辑:程序博客网 时间:2024/06/16 13:48

【Java 并发】易混淆的KeyWords

在学习并发编程时,有些KeyWords需要加以区分和理解
1,并发与并行
Concurrency,是并发的意思,并发就是只有一个CPU资源,程序(或线程)之间要竞争得到执行机会。换句话说就是多个线程被(一个)cpu 轮流切换着执行,由于切换时间很快,让人感觉好像线程是在同时进行,实际它们不是
Parallelism,即并行,指两个或两个以上事件(或线程)在同一时刻发生,是真正意义上的不同事件或线程在同一时刻,在不同CPU资源呢上(多核),同时执行。
举个栗子:
写代码时,女票的电话来了,你停止写代码去接电话,聊完后继续写代码,这时你就是并发,
写代码时,女票的电话来了,你一边写代码一边接电话,同时执行,这时你就是并行,

2,互斥,同步,异步
互斥,两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误,这种现象被称作进程互斥。
同步,两个或两个以上的进程之间协同运行,而不是“同时运行”。线程之间按照规则运行,比如:A一段运行后,停下等待B运行结果,B开始运行后将结果给A,A继续运行。
同步是一种更为复杂的互斥,而互斥是一种特殊的同步。也就是说互斥是两个任务之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!因此互斥具有唯一性和排它性,但互斥并不限制任务的运行顺序,即任务是无序的。而同步的任务之间则有顺序关系。

异步,和同步相反,同步是线程之间协同运行,按照规则顺序执行,执行完一个再执行下一个,需要等待、协调运行。而异步不需等得到结果才继续运行,它在等待的过程中继续完成自己的事情。

原创粉丝点击