zoukankan      html  css  js  c++  java
  • 有关于并发中的死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)

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

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

      

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

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

  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/hongcong/p/6408572.html
Copyright © 2011-2022 走看看