锁机制

作者: 东大俊飞 | 来源:发表于2018-04-08 15:47 被阅读0次

    一、说说线程安全问题,什么是线程安全,如何保证线程安全

    http://www.jasongj.com/java/thread_safe/

    二、重入锁的概念,重入锁为什么可以防止死锁

    https://www.jianshu.com/p/0cbcb606697d

    三、产生死锁的四个条件(互斥、请求与保持、不剥夺、循环等待)

    死锁概念:

    死锁是指多个进程循环等待彼此占有的资源而无限期的僵持等待下去的局面。

    产生死锁原因:

    1、因为系统资源不足。
    2、进程运行推进的顺序不合适。
    3、资源分配不当等。

    产生死锁四个条件:

    1、互斥条件:一个资源每次只能被一个进程使用。
    2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    3、不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
    4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
    这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述
    条件之一不满足,就不会发生死锁。

    死锁的处理策略

    (1) 死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。
    (2) 死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。
    (3) 死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。
    (4) 死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。

    死锁预防
    (1) 打破互斥条件:允许进程同时访问资源(有些资源就是不可以同时访问的,无实用价值)
    (2) 打破不可抢占条件:比如给进程设置优先级,高优先级的可以抢占资源(实现困难,降低系统性能)
    (3) 打破占有且等待条件:实行资源预分配策略,即进程在运行前一次性的向系统申请它所需要的全部资源(不可预测资源的使用,利用率低,降低并发性)
    (4) 破坏循环等待条件:采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出(限制和编号实现困难,增加系统开销,有些资源暂时不用也需要先申请,增加了进程对资源的占用时间)
    死锁避免
    允许进程动态的申请资源,但系统在进行资源分配前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源你分配给进程,否则,让进程等待。
    所谓安全状态,是指系统能按某种进程推进顺序,为每个进程分配其所需的资源,直至满足每个进程对资源的最大需求,是每个进程都可以顺序的完成。此时成P1P2P3...为安全序列,如果系统无法找到一个安全序列,则称系统处于不安全状态。
    并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;反之,只要系统处于安全状态,系统便可以避免进入死锁状态。
    银行家算法是最著名的死锁避免算法。
    死锁的检测
    资源分配图&&死锁定理
    死锁解除
    (1) 资源剥夺法。挂起某些思索进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源时,而处于资源匮乏的状态。
    (2) 进程撤销法。强制撤销一个或一部分进程并剥夺这些进程的资源。撤销的原则可以按进程的优先级和撤销进程代价的高低进行。
    (3) 进程回退法。让一个或多个进程回退到足以回避死锁的地步,进程回退时资源释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。

    四、如何检查死锁(通过jConsole检查死锁)

    五、volatile 实现原理(禁止指令重排、刷新内存)

    volatile实现原理—理解1
    volatile实现原理—理解2
    volatile实现原理—理解3

    六、synchronized 实现原理(对象监视器)

    synchronized 实现原理—理解1
    synchronized 实现原理—理解2

    七、synchronized、Lock、volatile 差异分析

    https://www.jianshu.com/p/dccad53a2665

    八、AQS同步队列

    深入浅出队列同步器AQS

    九、CAS无锁的概念、乐观锁和悲观锁

    乐观锁和悲观锁
    什么是CAS机制?
    什么是CAS机制?(进阶篇)

    十、常见的原子操作类

    常见的原子操作类

    十一、什么是ABA问题,出现ABA问题JDK是如何解决的

    CAS中的ABA问题

    十二、乐观锁的业务场景及实现方式

    https://www.jianshu.com/p/39d8b7437b0b

    十三、Java 8并发包下常见的并发类

    https://www.jianshu.com/p/de11b2e5798f

    十四、偏向锁、轻量级锁、重量级锁、自旋锁的概念

    https://www.jianshu.com/p/36eedeb3f912?from=jiantop.com
    https://www.jianshu.com/p/5da9ef598604

    相关文章

      网友评论

          本文标题:锁机制

          本文链接:https://www.haomeiwen.com/subject/euoxcftx.html