你必须知道的多线程几个概念

你必须知道多线程几个概念

同步(Synchronous)、异步(Asynchronous)

  1. 同步方法调用一旦开始,就必须等待方法执行完之后,才能继续后续的行为。
  2. 异步方法更像是消息传递,一旦开始,方法调用就会返回结果,调用者就可以继续后续的行为。

image-20190308223510003

并发(Concurrency)和并行

  1. 并发:指的是多个任务交替执行,而多个任务之间有可能还是串行的。
  2. 并行:并行多个任务之间是真实同时执行。

image-20190308225730993

临界区

临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程必须等待。

阻塞(Blocking)和非阻塞(Non-Blocking)

阻塞和非阻塞用来形容多线程之间的相互影响。

阻塞:指的是资源占用的情况下,其他线程想要获取资源,此时必须阻塞其他线程访问。

非阻塞:强调没有一个线程可以妨碍其他线程执行。

死锁、饥饿、活锁

死锁:谁都不愿意释放自己,这个状态一直维持下去,谁都别想争抢到资源。

饥饿:指某一个或者多个线程因为种种原因无法或得所需要的资源,导致一直无法执行。(比如线程优先级低,每次要执行时,都被线程优先级高的先执行,一直执行不了)

活锁:指的是线程都秉承“谦让”的原则,主动将资源释放给他人使用,那么就会出现资源不断在两个线程中跳动,而没有一个线程可以同时拿到所有资源而正常执行。

文章目录
  1. 1. 你必须知道多线程几个概念
    1. 1.1. 同步(Synchronous)、异步(Asynchronous)
    2. 1.2. 并发(Concurrency)和并行
    3. 1.3. 临界区
    4. 1.4. 阻塞(Blocking)和非阻塞(Non-Blocking)
    5. 1.5. 死锁、饥饿、活锁