code: int blockForReadSpace(int readLocation) {
  
          // sets the nextReadLocation my moving it on by 1, this may cause it it wrap back to the start.
          final int nextReadLocation = (readLocation + 1 == capacity) ? 0 : readLocation + 1;
  
          // in the for loop below, we are blocked reading unit another item is written, this is because we are empty ( aka size()=0)
          // inside the for loop, getting the 'writeLocation', this will serve as our read memory barrier.
          while (writeLocation == readLocation)
              blockAtTake();
  
          return nextReadLocation;
      }
docs: /**
  
  @param readLocation we want to minimize the number of volatile reads, so we read the readLocation just once, and pass it in
  @return