boolean remove(@NotNull T listener) {
    while (true) {
      T[] oldArray = get();
      T[] newArray = ArrayUtil.remove(oldArray, listener, arrayFactory);
      //noinspection ArrayEquality
      if (oldArray == newArray) return false;
      if (compareAndSet(oldArray, newArray)) break;
    }
    return true;
  }
boolean remove(@NotNull T listener)