code: public synchronized final void shutdown()
  	{
  		if (!this.isClosed) {
  			this.isClosed = true;
  
  			// close writing and reading threads with best effort and log problems
  			
  			// --------------------------------- writer shutdown ----------------------------------			
  			for (int i = 0; i < this.readers.length; i++) {
  				try {
  					this.writers[i].shutdown();
  				}
  				catch (Throwable t) {
  					LOG.error("Error while shutting down IO Manager writer thread.", t);
  				}
  			}
  
  			// --------------------------------- reader shutdown ----------------------------------
  			for (int i = 0; i < this.readers.length; i++) {
  				try {
  					this.readers[i].shutdown();
  				}
  				catch (Throwable t) {
  					LOG.error("Error while shutting down IO Manager reader thread.", t);
  				}
  			}
  			
  			// ------------------------ wait until shutdown is complete ---------------------------
  			try {
  				for (int i = 0; i < this.readers.length; i++) {
  					this.writers[i].join();
  				}
  				for (int i = 0; i < this.readers.length; i++) {
  					this.readers[i].join();
  				}
  			}
  			catch (InterruptedException iex) {}
  		}
  	}
docs: Close method. Shuts down the reader and writer threads immediately, not waiting for their
  pending requests to be served. This method waits until the threads have actually ceased their
  operation.