code: public final List<Factory> factories() {
          try {
              factoryLock.acquireRead();
              return new ArrayList<Factory>(factories);
          }
          finally{
              factoryLock.releaseRead();
          }
      }
docs: Return a snapshot of the currently registered factories.  There
  is no guarantee that the list will still match the current
  factory list of the service subsequent to this call.