Can this be made private? If it's intended for package access, perhaps it should live in the package rather than as an inner class? Seems very specific to this though.

What happens if setFirst or setNext are called concurrently?

There is a comment saying  "giving up if a newer subscription was already set" so this concerns me with silent failures. Should this throw an exception instead of silently failing if it is ever used incorrectly? Should we just say this is not thread-safe and it only works for this specific use case? I tend to prefer throwing an IllegalStateException or something similar if it's misused rather than silently giving up or failing.