因为线程可以阻塞,并且具有同步控制机制可以防止其他线程在锁还没有释放的情况下访问这个对象,这时就产生了矛盾,比如:线程A在等待线程B,而线程B又在等待线程A,这样就造成了死锁。
一般造成死锁必须同时满足如下4个条件:
互斥条件:线程使用的资源必须至少有一个是不能共享的;
请求与保持条件:至少有一个线程必须持有一个资源并且正在等待获取一个当前被其他线程持有的资源;
非剥夺条件:分配的资源不能从相应的线程中被强制剥夺;
循环等待条件:第一个线程等待其他线程,后者又在等待第一个线程序。
因为要发生死锁,这4个条件必须同时满足,所以要防止死锁的话,只需要破坏其中一个条件即可。