Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java同步轮询_Java_Synchronization - Fatal编程技术网

Java同步轮询

Java同步轮询,java,synchronization,Java,Synchronization,这是我看过的一些代码。你能看出它有什么毛病吗 [更新] public class ResourceManager1 { private final String mutex = ""; Object resource = null; public Object getResource() { synchronized (mutex) { if (resource == null) {

这是我看过的一些代码。你能看出它有什么毛病吗

[更新]

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

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


此外,您需要一个返回resource的getResource方法,但我想这只是一个输入错误。

从不同步字符串,尤其是插入的字符串文本。你基本上只有一把锁


一般来说,除非外部可见性的目的正是为了锁定,否则永远不要对任何可能在类外部可见的引用(包括此引用)进行同步。我通常使用专门为锁定目的创建的私有final变量。

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

这里的问题不是字符串的不变性,而是字符串文本的内部存储。Java本来可以保留不变的字符串,但不能进行内部调用,在这种情况下,这段代码就可以工作了。啊,没错……我知道我的意思,但说得很糟糕。我们都知道这对程序员来说不是一件好事,谢谢你的更正是的,可以使用mutex=newstring;:哦,太好了,没有评论就更低调了。是因为我使用了Java而不是C吗?也许这不是一个真正需要讨论或帮助的问题。。这基本上是一个小测验。有些人在问题中可能不这么认为……只是为了记录在案,我注意到在标题中使用英国/澳大利亚的“-ision”可能有点奇怪——尽管我更喜欢,但java关键字是-ize,这样可能会使其更易于搜索