* 如果一个线程持有字符串锁,则这会产生潜在的死锁
* 和其他持有整数锁,他们等待对方,永远。...method2() 都由两个或多个线程调用,则存在死锁的可能性, 因为如果线程 1 在执行 method1() 时在 Sting 对象上获取锁, 线程 2 在执行 method2() 时在 Integer...此图精确演示了我们的程序, 其中一个线程在一个对象上持有锁, 并等待其他线程持有的其他对象锁。...由于没有线程愿意放弃, 因此存在死锁, Java 程序被卡住。...其理念是, 你应该知道使用常见并发模式的正确方法, 如果你不熟悉这些模式,那么 Jose Paumard 《应用于并发和多线程的常见 Java 模式》是学习的好起点,另外关注微信公众号Java技术栈,也可以阅读很多设计模式干货