[ https://issues.apache.org/jira/browse/GEODE-3416?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16127649#comment-16127649 ]
ASF GitHub Bot commented on GEODE-3416: --------------------------------------- Github user pivotal-amurmann commented on a diff in the pull request: https://github.com/apache/geode/pull/702#discussion_r133252327 --- Diff: geode-core/src/main/java/org/apache/geode/internal/net/SocketCloser.java --- @@ -96,46 +99,56 @@ public int getMaxThreads() { return this.asyncClosePoolMaxThreads; } - private ThreadPoolExecutor getAsyncThreadExecutor(String address) { - synchronized (asyncCloseExecutors) { - ThreadPoolExecutor pool = asyncCloseExecutors.get(address); - if (pool == null) { - final ThreadGroup tg = LoggingThreadGroup.createThreadGroup("Socket asyncClose", logger); - ThreadFactory tf = new ThreadFactory() { - public Thread newThread(final Runnable command) { - Thread thread = new Thread(tg, command); - thread.setDaemon(true); - return thread; - } - }; - BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>(); - pool = new ThreadPoolExecutor(this.asyncClosePoolMaxThreads, this.asyncClosePoolMaxThreads, - this.asyncClosePoolKeepAliveSeconds, TimeUnit.SECONDS, workQueue, tf); - pool.allowCoreThreadTimeOut(true); - asyncCloseExecutors.put(address, pool); + private ExecutorService getAsyncThreadExecutor(String address) { + ExecutorService executorService = asyncCloseExecutors.get(address); + if (executorService == null) { + // To be used for pre-1.8 jdk releases. + // createThreadPool(); + + executorService = Executors.newWorkStealingPool(asyncClosePoolMaxThreads); + + ExecutorService previousThreadPoolExecutor = + asyncCloseExecutors.putIfAbsent(address, executorService); + + if (previousThreadPoolExecutor != null) { + executorService.shutdownNow(); + return previousThreadPoolExecutor; } - return pool; } + return executorService; + } + + /** + * @deprecated this method is to be used for pre 1.8 jdk. --- End diff -- I always appreciate it as a consumer if deprecations contain information about what the new solution is for the problem that the deprecated code was solving. > Reduce blocking for SocketCloser.asyncClose > -------------------------------------------- > > Key: GEODE-3416 > URL: https://issues.apache.org/jira/browse/GEODE-3416 > Project: Geode > Issue Type: Bug > Components: client/server > Affects Versions: 1.1.0, 1.1.1, 1.2.0, 1.2.1 > Reporter: Udo Kohlmeyer > Assignee: Udo Kohlmeyer > Fix For: 1.3.0 > > > In the SocketCloser.asyncClose method, there is a synchronization block > around at HashMap. This synchronization will cause an effective > single-threaded processing capability when closing sockets. this effect > becomes more evident with a high number of clients. -- This message was sent by Atlassian JIRA (v6.4.14#64029)