有关于并发中的死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)

  最近在看《实战Java高并发程序设计》,发现了之前没有接触过的几个名词。

死锁:之前在接触多线程的时候,接触过死锁的情况。死锁是线程中最糟糕的情况,如下面的图中的四辆车子一样,如果没有一辆车主动出来。那么这种状态永远会这样维持下去

  

 饥饿(Starvation):饥饿是指某一线程或多个线程在某种情况下无法获取所需要的资源,导致程序无法执行。比如,当某个线程的优先级太低的时候,那么高优先级的线程会始终霸占着资源,而低优先级的线程由于无法得到相应的资源而无法工作。在自然界中,雏鸟就有这种情况,由于雏鸟太多,所以能得到食物的总是那些强壮的雏鸟,而某些弱小的雏鸟总是会挨饿甚至会饿死。当然,饥饿的情况比死锁要好的多,毕竟,一般情况下,等高优先级的线程执行完了之后,总是能轮到低优先级的线程执行的。

活锁(Livelock):活锁是一种很有趣的现象,先举个例子,有两个人,一个人在电梯里想出来,一个人在电梯外想进电梯。这时候,两个人都很绅士的想让对方,但是还是撞上了对方。然后在进行一次刚才的情况,人是一种智慧的生物。也许经过2、3次以后,便可以解决这个问题,但是线程不会,如果线程的智慧不够的话,两条线程都秉着谦让的原则,这时候资源就会在这两条线程中不断跳动,而不会有一个线程拿到所有资源而真正执行下去。这种情况就是活锁。

原文地址:https://www.cnblogs.com/hongcong/p/6408572.html