code: protected void postValue(T value) {
          boolean postTask;
          synchronized (mDataLock) {
              postTask = mPendingData == NOT_SET;
              mPendingData = value;
          }
          if (!postTask) {
              return;
          }
          ArchTaskExecutor.getInstance().postToMainThread(mPostValueRunnable);
      }
docs: Posts a task to a main thread to set the given value. So if you have a following code
  executed in the main thread:
  <pre class="prettyprint">
  liveData.postValue("a");
  liveData.setValue("b");
  </pre>
  The value "b" would be set at first and later the main thread would override it with
  the value "a".
  <p>
  If you called this method multiple times before a main thread executed a posted task, only
  the last value would be dispatched.
  
  @param value The new value