### 17.1 P2 — `rotate` 가 비교 후 교체가 아니라 덮어쓰기다

`install` 은 정확하다.

```java
if (!holder.compareAndSet(null, runtime)) {
  throw new IllegalStateException("… already has a runtime; use rotate()");
}
```

`rotate` 는 그렇지 않다.

```java
GrpcChannelRuntime previous = holder.get();
if (!previous.generation().supersededBy(next)) { throw …; }
