/** * Please ensure to use try finally around get and return of selector so avoid leaks. * Get a exclusive {@link Selector} * @return {@link Selector} */ public static Selector getSelector() { Selector selector = selectors.poll(); if (selector != null) { poolSize.decrementAndGet(); } else { try { selector = Utils.openSelector(); } catch (IOException e) { LoggerUtils.getLogger().log(Level.WARNING, "SelectorFactory. Can not create a selector", e); } final int missesCount = missesCounter.incrementAndGet(); if (missesCount % MISS_THRESHOLD == 0) { LoggerUtils.getLogger().log(Level.WARNING, "SelectorFactory. Pool encounters a lot of misses {0}. " + "Increase default {1} pool size", new Object[] {missesCount, maxSelectors}); } } return selector; }