在运行下面的代码时,我有时会在打印B的内容时得到陈旧的数据,我真的不明白为什么会发生这种情况,因为更新和接收B的内容受到B的锁的保护。还请注意,B.updated()不是同步的,但我不认为这是问题所在,因为在访问B的内容之前,我要确保将更新的计数器设置为2。class B { int updated = 0
// get and set protected by B's mo
所以我有类似下面这样的代码synchronized(objectTwo){ do stuff }
这样做的问题是,即使objectTwo的锁可用,程序也会等待objectOne上的锁。我想说的是:尝试同时锁定objectOne和objectTwo,无论您先锁定哪个锁,都可以锁定该锁。我已经想出了一个解决方案,但我认为它有点老生常谈,我想知道是否有人有更好的想法。我的想法是:启动两个线程,每个线程等待一个锁<