code: synchronized void registerStreams(int operationId, List<OperationResponse.StreamEntry> streams) {
          // ^^^ synchronize on 'this' to avoid races with shutdown
  
          if (!stopped) {
              // Streams share a timestamp so activity on any is sufficient to keep the rest alive
              AtomicLong timestamp = new AtomicLong(System.currentTimeMillis());
              for (int i = 0; i < streams.size(); i++) {
                  OperationResponse.StreamEntry stream = streams.get(i);
                  InputStreamKey key = new InputStreamKey(operationId, i);
                  streamMap.put(key, new TimedStreamEntry(stream, timestamp));
              }
          } else {
              // Just close the streams, as no caller ever will
              for (int i = 0; i < streams.size(); i++) {
                  closeStreamEntry(streams.get(i), operationId, i);
              }
          }
      }
docs: Registers a set of streams that were associated with a particular request. Does nothing if {@link #shutdown()}
  has been invoked, in which case any use of the {@link #getReadHandler() read handler} will result in behavior
  equivalent to what would be seen if the the registered stream had 0 bytes of content.
  
  @param operationId id of the request
  @param streams the streams. Cannot be {@code null} but may be empty