造成死锁的原因:
- 互斥条件.
- 不可剥夺.
- 循环等待
- 占有且等待.
1.互斥,共享资源 X 和 Y 只能被一个线程占用;
2.占有且等待,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;
3.不可抢占,其他线程不能强行抢占线程 T1 占有的资源;
4.循环等待,线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有的资源,就是循环等待。
如何解决:
1.第一点互斥是我们需要的,共享资源只能被一个线程占用.
2.占有且等待.内部封装,一次申请完,全部释放.
3.不可抢占,可以用Java中的lock解决.后面补充实例.
3.破坏这个条件,需要对资源进行排序,然后按序申请资源
