第一码
事实是,您有3个线程实例,每个线程运行它自己
synchronized的method实例
run()。但是总是只有一个线程想要与其自己的
run()方法同步,因此它将在线程希望其运行时运行。这根本没有同步。
第二码
您也有3个线程实例,但是它们 共享 对letter对象 的引用 。因此,如果锁定此引用,线程将相互排斥,并且代码将按预期运行。
附加信息
这篇文章很好地解释了第一个解决方案为什么不起作用的原因:是否应该同步run方法?为什么或者为什么不?

第一码
事实是,您有3个线程实例,每个线程运行它自己
synchronized的method实例
run()。但是总是只有一个线程想要与其自己的
run()方法同步,因此它将在线程希望其运行时运行。这根本没有同步。
第二码
您也有3个线程实例,但是它们 共享 对letter对象 的引用 。因此,如果锁定此引用,线程将相互排斥,并且代码将按预期运行。
附加信息
这篇文章很好地解释了第一个解决方案为什么不起作用的原因:是否应该同步run方法?为什么或者为什么不?