Java同步轮询

时间:2008-12-05 10:58:11

标签: java synchronization

这是我曾经看过的一些代码。你能看出它有什么问题吗?

[更新]

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;
    }
}

3 个答案:

答案 0 :(得分:12)

永远不要在字符串上进行同步,尤其是实习的字符串文字。你基本上只有一把锁。

一般情况下,永远不要在类外可见的任何引用(包括“this”)上进行同步,除非外部可见性的目的正是出于锁定目的。我通常使用仅为了锁定而创建的private final变量。

答案 1 :(得分:1)

对于两个类,您使用相同的字符串作为互斥锁,因此一次只能使用一个同步块,这似乎不是代码的意图。

答案 2 :(得分:0)

互斥不是最终的,资源不是私有的。

此外,你需要一个返回资源的getResource方法,但我想这只是一个错字。