grafts should be volatile, and use a volatile safe pattern here:

  static State {
    final FileSnapshot snapshot;
    final Map... grafts;
  }
  private volatile State state;

  State s = state;
  if (s.isOutdated()) {
    s = loadGrafts();
    state = s;
  }
  return s.grafts;