多线程的一些概念


1、同步和异步

  • 同步:方法调用一旦开始调用者就要等到方法返回后才能进行下一步的操作。
  • 异步:方法调用后就立即返回,调用者可以继续后续的操作,异步方法在另一线程中执行。

2、并发和并行

都可以表示多个任务同时进行。

  • 并发:偏重于多个任务交替执行,而多个任务之间有可能还是串行的。
  • 并行:多个任务同时执行。

3、阻塞和非阻塞

  • 阻塞:一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。
  • 非阻塞:没有一个线程可以妨碍其他线程执行,所有线程都会尝试不断向前执行。

4、死锁、饥饿、活锁

  • 死锁:多个线程都在等待其他线程释放资源,而自己却不释放资源,造成线程之间互相等待,不能向下执行。
  • 饥饿:线程因某种原因(优先级等)无法获得所需资源,导致一直无法执行。
  • 活锁:线程都会主动释放资源,导致没有线程获得足够资源。