注意:我不是在寻找解决方法;我敢肯定,如果有必要,我可以找到其他方法。我只是觉得我错过了一些基本的或古怪的东西,我想知道我错过了什么。或者,如果有一种方法可以使用调试器来获取更多信息,那也很好。谢谢!
我在使用同步时遇到问题。我收到了僵局,但这似乎完全不可能。我在每个同步调用之前、每个调用内部以及退出之前都放置了打印语句,这样我就可以看到谁拥有哪些同步对象。我发现即使当前没有人持有该对象的锁,它也不会进入我的同步调用之一。是否有一些我遗漏的怪癖或非法嵌套操作?这是我正在做的事情的要点。
哦,是的,最奇怪的是,删除两个“busyFlagObject”同步使它工作正常......
线程 1:
public void DrawFunction()
{
synchronized(drawObject)
{
...
// Hangs here though nobody has a lock on this object
synchronized(animationObject)
{
}
}
}
线程 2:
public void AnotherFunction()
{
synchronized(busyFlagObject)
{
// Calls a function that also uses this same Synchronized call
synchronized(busyFlagObject)
{
// Calls another function that uses another Synchronized call
// Hangs here waiting for the draw function to complete which it SHOULD
// be able to do no problem.
synchronized(drawObject)
{
}
// Never gets to this one assuming the Log statements don't
// buffer and aren't flushed but still shouldn't be a problem anyway.
synchronized(animationObject)
{
}
}
}
}