死锁
什么是死锁
是一组互相竞争资源的线程,因互相等待,导致“永久”阻塞的现象。
发生死锁的原因
1.互斥条件,共享资源X和Y只能被一个线程占用
2.占有且等待,线程T1已经获取得共享资源X在等待共享资源Y的时候,不释放共享资源X
3.不可抢占,其他线程不能强行抢占线程T1占有的资源
4.循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源
如何避免死锁
打破死锁的四个原因。
第一个互斥条件是无法被破环的,因为锁本身就是通过互斥来解决线程安全问题的。
第二个占有且等待,打破方式是,一次性申请所有的资源,这样就不用等待了。
第三个不可抢占,占用资源的线程,进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源,这样打破了。
第四个循环等待,可以靠按序申请资源来进行预防,所以按序申请是指资源是有线性顺序的,申请的时候可以先申请资源序号小的,再申请资源序号大的,这样线性化后自然就不存在循环等待了。
死锁
http://hanqichuan.com/2019/07/18/java/死锁/