code: public Iterator<T> read(long afterSequenceNumber, int count) {
          ListNode<T> firstNode;
          synchronized (this.lock) {
              firstNode = this.head;
          }
  
          // Find the first node that has a Sequence Number after the given one, but make sure we release and reacquire
          // the lock with every iteration. This will prevent long-list scans from blocking adds.
          while (firstNode != null && firstNode.item.getSequenceNumber() <= afterSequenceNumber) {
              synchronized (this.lock) {
                  firstNode = firstNode.next;
              }
          }
  
          return new NodeIterator<>(firstNode, count, this.lock);
      }
docs: Reads a number of items starting with the first one that has a Sequence Number higher than the given one.
  
  @param afterSequenceNumber The sequence to search from.
  @param count               The maximum number of items to read.
  @return An Iterator with the resulting items. If no results are available for the given parameters, an empty iterator is returned.