not sure if concurrent read calls are to-be-expected, but if so, perhaps 'skipFirst' should be an AtomicBoolean and compareAndSet() used here