On x86 and with Java 8, getAndSet is compiled to ```LOCK XCHG``` instead of looping and trying to CAS in the new value. This may be true for other platforms. Since now the swap-in of the terminal state is fully atomic, concurrently running add or remove loops will stop faster. Previously, since everybody looped, it was more likely an add succeded before unsubscribe did. This might not be of concern just I wanted to explain the reason behind the use of getAndSet here.