### Question:
Bootstrap implements ExternalResourceReleasable { public void releaseExternalResources() { ChannelFactory factory = this.factory; if (factory != null) { factory.releaseExternalResources(); } } protected  Bootstrap(); protected  Bootstrap(ChannelFactory channelFactory); ChannelFactory getFactory(); void setFactory(ChannelFactory factory); ChannelPipeline getPipeline(); void setPipeline(ChannelPipeline pipeline); Map<String, ChannelHandler> getPipelineAsMap(); void setPipelineAsMap(Map<String, ChannelHandler> pipelineMap); ChannelPipelineFactory getPipelineFactory(); void setPipelineFactory(ChannelPipelineFactory pipelineFactory); Map<String, Object> getOptions(); void setOptions(Map<String, Object> options); Object getOption(String key); void setOption(String key, Object value); void releaseExternalResources(); void shutdown();  }### Answer:
@Test public void testReleaseSharedNotDeadlock() { final ExecutorService pool = Executors.newFixedThreadPool(2); final ClientBootstrap client = new ClientBootstrap( new NioClientSocketChannelFactory(pool, Executors.newCachedThreadPool())); final ServerBootstrap server = new ServerBootstrap( new NioServerSocketChannelFactory(pool, Executors.newCachedThreadPool())); client.releaseExternalResources(); server.releaseExternalResources(); }