`replayObserverFromIndex` always access `index` first. Actually, if I swap these two statement,

```java
int index = h.index.get();
int size = h.list.size();
```

I can pass this test. I think `index` can guarantee "l < index.get() <= list.size()". So I feel this is not the cause of the concurrency issue.