赞
踩
死锁:即多个线程因竞争而造成一种互相等待的现象。
简单一点说:
一个资源每次只能被一个进程使用,而当正在占用这个资源的进程又需要去使用其它资源时正好处于阻塞状态,导致使用中的资源无法释放,请求的资源又处于无限等待中。
如果所有代码都是我们自己开发的,不太会出现这样的情况,至少在不是太复杂的情景下应该不会刻意去设计一个死锁的代码,但如果调用了其它外部的api或一些共享的资源时,就不可避免的出现一些死锁的情况。
如:一个线程T1持有锁R1并且申请获得锁R2,而另一个线程T2持有锁R2并且申请获得锁R1,因为默认的锁申请操作都是阻塞的,所以线程T1和T2永远被阻塞了。导致了死锁。
但是实际环境中的死锁往往比这个复杂的多。可能会有多个线程形成了一个死锁的环路,比如:线程T1持有锁R1并且申请获得锁R2,而线程T2持有锁R2并且申请获得锁R3,而线程T3持有锁R3并且申请获得锁R1,这样导致了一个锁依赖的环路:T1依赖T2的锁R2,T2依赖T3的锁R3,而T3依赖T1的锁R1。从而导致了死锁。
- package pub.ryan.concurrency.stage1;
-
- public class DeadLockDemo {
- public static void main(String[] args) {
- Event event = new Event()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。