关于java:JAVA并发之基础概念

40次阅读

共计 1072 个字符,预计需要花费 3 分钟才能阅读完成。

1. 并发和并行

举个例子

并发(concurrency): 并发的关键在于有解决多个工作的能力, 但并不一定就是同时解决.

例 1: 吃饭时, 电话响起, 临时停下吃饭的动作, 接完电话后持续吃饭.

例 2: 一个人吃 3 个馒头

并行(parallelism): 并行的关键在于同时解决多个工作

例子 1: 吃饭时, 电话响起, 同时进行吃饭和电话 2 个动作

例子 2: 三个人吃 3 个馒头

“并发”指的是程序的构造,“并行”指的是程序运行时的状态

即便不看具体解释,也请记住这句话.

并行(parallelism)

这个概念很好了解。所谓并行,就是 同时执行 的意思,无需适度解读。判断程序是否处于并行的 状态 ,就看同一时刻是否有超过一个“工作单位”在运行就好了。所以, 单线程永远无奈达到并行状态

要达到并行状态,最简略的就是利用 多线程 多过程

留神: Python 的多线程因为存在驰名的 GIL(艰深了解为就是一把全局排他锁),无奈让两个线程真正“同时运行”,所以实际上是无奈达到并行状态的。

并发(concurrency)

要了解“并发”这个概念,必须得分明,并发指的是程序的“构造”。当咱们说这个程序是并发的,实际上,这句话该当表述成“这个程序采纳了反对并发的设计”。好,既然并发指的是人为设计的构造,那么怎么的程序结构才叫做反对并发的设计?

正确的并发设计的规范是:两个工作能够在重叠的时间段内启动、运行和实现(two tasks can start, run, and complete in overlapping time periods)

并发 并行 辨别的要害:

是否是同时解决多个工作

2. 同步和异步

  • 所谓同步,就是在收回一个调用时,在没有失去后果之前,该调用就不返回。然而一旦调用返回,就失去返回值了。
  • 异步则是相同,调用在收回之后,这个调用就间接返回了,所以没有返回后果。换句话说,当一个异步过程调用收回后,调用者不会立即失去后果。而是在调用收回后,被调用者通过状态、告诉来告诉调用者,或通过回调函数解决这个调用。

辨别的要害

同步和异步关注的是 音讯通信机制 (synchronous communication/ asynchronous communication)

3. 阻塞与非阻塞

  • 阻塞调用是指调用后果返回之前,以后线程会被挂起。调用线程只有在失去后果之后才会返回。
  • 非阻塞调用指在不能立即失去后果之前,该调用不会阻塞以后线程。

辨别的要害

阻塞和非阻塞关注的是程序在期待调用后果(音讯,返回值)时的 状态.

“阻塞”与 ” 非阻塞 ” 与 “ 同步 ” 与“异步 ” 不能简略的从字面了解
前者关注的是期待后果时的状态, 后者关注的是通信机制
关注公众号:java 宝典

正文完
 0