多线程(一) 了解多线程,以及涉及到的一些基本概念

同步(Synchronous)和异步(Asynchronous)

   同步和异步主要用于指对于一次方法的调用过程。同步方法调用开始后,方法者必须等到这一次调用返回后,才能继续后续的操作。异步方法调用开始后,立即返回,方法者可继续开始后续的行为。

并发(Concurrency)和并行(Parallelism)

   并发和并行主要用于指多个任务的执行。并发是指多个任务交替执行,实际上可能仍然是串行。而并行则是真正意义上的指多个任务同时执行。

临界区

   临界区又通常称为共享数据或者公共资源,它可以被多个线程所使用,但,每次只能有一个线程使用它,一旦被占用,其它线程要想使用这个资源,必须等待。

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

   阻塞和非阻塞通常用来形容线程之间的相互影响。当一个线程占用了临界区之后,其它线程想要访问此共享数据,必须等待,此时等待会导致线程挂起,这就是阻塞。非阻塞则是线程之间对临界区的访问不会相互影响。

死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)

   三者都属于线程活跃性的问题。死锁是指线程之间占用了彼此运行时所需要的资源,而且都不愿意让步,导致这个状态一直维持下去,例如著名的哲学家进餐问题。
   饥饿是指线程因为种种原因无法获得其所需要的资源,导致一直无法执行。例如,它的优先级太低。
   活锁是指两个线程运行时,都主动的将资源释放给对方使用,导致资源不断的在两个线程之间跳动,而没有一个线程能拿到资源并且执行。

多线程

   什么是多线程?为什么需要多线程?
   多线程是指一个应用程序同时执行多个任务,一个任务称为一个线程,而一个应用程序有一个以上的线程我们称之为多线程。
   使用多线程的好处一般而言是为了提高系统效率,提高CPU的利用率。

多线程的三个特性

   原子性(Atomicity)是指多个线程一起执行时,一个操作一旦开始,就不会被其它的线程所干扰,即这个操作是不可中断的。
   可见性(Visibility)是指一个线程对共享变量进行修改之后,其它线程是否能够立即知道这个修改。
   有序性是指多个线程执行时候是否依次从上向下的执行。由于程序执行时可能会进行指令重排,所以重排后的指令顺序可能发生了改变。

猜你喜欢

转载自blog.csdn.net/jackFXX/article/details/78962538
今日推荐