Home | About | Sematext search-lucene.com search-hadoop.com
 Search Hadoop and all its subprojects:

Switch to Threaded View
Accumulo, mail # dev - Double Checked Locking - broken? working?


Copy link to this message
-
Double Checked Locking - broken? working?
David Medinets 2012-09-12, 21:47
I see the following code in the Property class:

  public static boolean isValidTablePropertyKey(String key) {
    if (validTableProperties == null) {
      synchronized (Property.class) {
        if (validTableProperties == null) {
          HashSet<String> tmp = new HashSet<String>();
          for (Property p : Property.values())
            if (!p.getType().equals(PropertyType.PREFIX) &&
p.getKey().startsWith(Property.TABLE_PREFIX.getKey()))
              tmp.add(p.getKey());
          validTableProperties = tmp;
        }
      }
    }

    return validTableProperties.contains(key) ||
key.startsWith(Property.TABLE_CONSTRAINT_PREFIX.getKey())
        || key.startsWith(Property.TABLE_ITERATOR_PREFIX.getKey()) ||
key.startsWith(Property.TABLE_LOCALITY_GROUP_PREFIX.getKey());
  }

However, http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
says that Double Check Locking does not work. Is there any reason to
believe that the article is incorrect? At the end of the article, it
recommends using volatile in Java 1.5 and above. Is there any reason
the code should not be changed to use the volatile technique?