什么是死锁,如何在Java中进行分析并避免死锁?