参考URL:Java并发性和多线程介绍
1.死锁:
一个线程调用方法A锁住了对象1,另一个线程调用方法B锁住了对象2,方法A要使用对象2,而方法B又要使用对象1,那么它们相互等待锁,死锁发生。注意,两个线程需要同时调用才会死锁。
例如,两个线程同时调用parent.addChild(child)和child.setParent(parent)方法,并且是同一个parent对象和同一个child对象,这两个方法都是同步方法,才有可能发生死锁。一般线程调度不可预测,死锁也仅仅是可能发生。多个线程的死锁,例如1等待2,2等待3,3等待4,4等待1。
2.数据库的死锁:
一个事务由多条SQL组成。
当在一个事务中更新一条记录,这条记录就会被锁住避免其他事务的更新请求,直到第一个事务结束。
当多个事务需要对一些相同的数据进行修改时,可能就会死锁。