您缺少谜题的许多部分:
您尝试在每个线程本地的对象上进行同步。这可能没有任何效果,JVM甚至可以删除整个锁定操作。
您
notifyAll
没有匹配地执行wait
;缺少
wait
必须在 顶部 的的run
方法,而不是在底部,你表示。
总的来说,恐怕此时修复您的代码超出了一个StackOverflow答案的范围。我的建议是首先使自己熟悉核心概念:Java中的锁的语义,它们如何与
wait和互操作以及
notify这些方法的精确语义。关于该主题的Oracle教程将是一个不错的开始。

您缺少谜题的许多部分:
您尝试在每个线程本地的对象上进行同步。这可能没有任何效果,JVM甚至可以删除整个锁定操作。
您
notifyAll没有匹配地执行
wait;
缺少
wait必须在 顶部 的的
run方法,而不是在底部,你表示。
总的来说,恐怕此时修复您的代码超出了一个StackOverflow答案的范围。我的建议是首先使自己熟悉核心概念:Java中的锁的语义,它们如何与
wait和互操作以及
notify这些方法的精确语义。关于该主题的Oracle教程将是一个不错的开始。