死锁

120 阅读1分钟

保护多个资源

解决原子性问题,要保证中间状态对外不可见。

使用Account.class作为互斥锁,解决转账问题,不存在并发问题,但是Account.class是所有Account实例共享的,JVM在加载类的时候创建。

死锁

四个条件都发生时会导致死锁:

1.互斥,共享资源X和Y只能被一个线程占用;

2.占有且等待,线程T1取得共享资源X,在等待共享资源Y的时候,不释放共享资源X;

3.不可抢占,其他线程不能强行抢占线程T1占有的资源;

4.循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源。

出了互斥,其他三个条件都能被破坏。

2.占有且等待,可以一次性申请所有的资源。

3.不可抢占,超时等待,占有资源的线程如果等待不到,可以主动释放占有的资源。

4.循环等待,资源申请顺序性,可以给资源编号,线性化获取。