这是我曾经看过的一些代码。你能看出它有什么问题吗?
[更新]
public class ResourceManager1
{
private final String mutex = "";
Object resource = null;
public Object getResource()
{
synchronized (mutex)
{
if (resource == null)
{
resource = new Object();
}
}
return resource;
}
}
public class ResourceManager2
{
private final String mutex = "";
Object resource = null;
public Object getResource()
{
synchronized (mutex)
{
if (resource == null)
{
resource = new Object();
}
}
return resource;
}
}
答案 0 :(得分:12)
永远不要在字符串上进行同步,尤其是实习的字符串文字。你基本上只有一把锁。
一般情况下,永远不要在类外可见的任何引用(包括“this”)上进行同步,除非外部可见性的目的正是出于锁定目的。我通常使用仅为了锁定而创建的private final
变量。
答案 1 :(得分:1)
对于两个类,您使用相同的字符串作为互斥锁,因此一次只能使用一个同步块,这似乎不是代码的意图。
答案 2 :(得分:0)
互斥不是最终的,资源不是私有的。
此外,你需要一个返回资源的getResource方法,但我想这只是一个错字。