1.同步和异步多线程
用一次方法调用来讲:并发
同步方法一旦调用开始,便必须等到方法调用返回后,才能继续后面的行为。异步
异步方法更像是一个消息传递,一旦开始,方法调用就会当即返回,调用者就能够继续后续的操做。异步方法一般会在另一个线程中"真实"地运行。整个过程,不会阻碍调用者的工做。spa
示例:线程
淘宝上购物,咱们只须要把商品加入购物车,付款就行了,其余物流配送的环节都是异步执行的。资源
2.并发和并行同步
并发:多个任务交替运行淘宝
并行:多个任务平行的运行并行
一个CPU的话,确定是并发。并行只能发生在多个CPU的状况下。方法
3.临界区
临界区来表示一种公共资源或者是共享数据,能够被多个线程使用。可是每一次,只能有一个线程使用它,一旦临界区资源被占用,其余线程想要这个资源,就必须等待。
举例:
一个办公室只有一台打印机,小名和小刚同时须要打印文件,很显然,只能一个一个来。这里的打印机的例子就是一个临界区。
4.阻塞和非阻塞
阻塞和非阻塞一般用来形容多线程间的相互影响。好比一个线程占用了临界区资源,那么其余全部须要这个资源的线程就必须在这个临界区中进行等待。等待会致使线程挂起,这种状况就是阻塞。此时,若是占用资源的线程一直不肯意释放资源,那么其余全部阻塞在这个临界区上的线程都不能工做。
非阻塞的意思与之相反,他强调没有一个线程能够妨碍其余线程执行。全部的线程都会尝试不断向前执行。
5.死锁、饥饿 、活锁
死锁: A车想入库,B车想出库。结果谁也不让谁。这时候就是死锁。
饥饿: 某个线程因为种种缘由没法得到想要的资源,致使一直没法执行。好比他的线程优先级太低,而高优先级的线程不断抢占他的资源,致使低优先级线程没法工做。
举例:天然界中,母鸟喂食雏鸟时,很容易出现这种状况。因为雏鸟比较多,食物有限,雏鸟之间的竞争可能很激烈,小雏鸟由于常常抢不到食物,可能被饿死。
活锁: