现象 public synchronized void insertData(){ delete ... where id = 1 insert into table values(1...) } 在多线程运行的时候insert先持有id=1的锁,导致delete死锁 原因 锁的方法不是静态方法,锁的是对象,如果线程里面用的是不同的对象,他们之间还是会有锁的冲突的,解决方法要么改成静态方法,要么锁类的方法块。