code: public synchronized EvernoteClientFactory getEvernoteClientFactory() {
          if (mFactoryThreadLocal == null) {
              mFactoryThreadLocal = new ThreadLocal<>();
          }
          if (mEvernoteClientFactoryBuilder == null) {
              mEvernoteClientFactoryBuilder = new EvernoteClientFactory.Builder(this);
          }
  
          EvernoteClientFactory factory = mFactoryThreadLocal.get();
          if (factory == null) {
              factory = mEvernoteClientFactoryBuilder.build();
              mFactoryThreadLocal.set(factory);
          }
          return factory;
      }
docs: Returns a factory to create various clients and helper objects to get access to the Evernote API.
  
  <br>
  <br>
  
  The returned factory is <b>not thread safe</b> itself, however, the cached factory is a thread local
  object. That means a new factory is created for each thread calling this method. The recommended
  approach is to reuse worker threads to keep the number of created factories small.
  
  <br>
  <br>
  
  With {@link #setEvernoteClientFactoryBuilder(EvernoteClientFactory.Builder)} you can exchange
  the builder.
  
  @return A factory for this thread.