You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/08/30 18:04:57 UTC

[lucene-solr] branch reference_impl_dev updated: @640 Searching for thread perfection.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/reference_impl_dev by this push:
     new f12af0c  @640 Searching for thread perfection.
f12af0c is described below

commit f12af0cefa4e96e11ea01bb806da3d6e7ddd4b8a
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sun Aug 30 13:04:29 2020 -0500

    @640 Searching for thread perfection.
---
 .../src/java/org/apache/solr/common/ParWork.java   |  2 +-
 .../org/apache/solr/common/ParWorkExecutor.java    | 56 ++++++++++++----------
 .../org/apache/solr/common/util/ExecutorUtil.java  |  3 +-
 3 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/solr/solrj/src/java/org/apache/solr/common/ParWork.java b/solr/solrj/src/java/org/apache/solr/common/ParWork.java
index 531054c..2e2ef6c 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ParWork.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ParWork.java
@@ -115,7 +115,7 @@ public class ParWork implements Closeable {
       if (unlockClose) {
         exec.closeLock(false);
       }
-      ParWork.close(exec);
+      ExecutorUtil.shutdownAndAwaitTermination(exec);
       THREAD_LOCAL_EXECUTOR.set(null);
     }
   }
diff --git a/solr/solrj/src/java/org/apache/solr/common/ParWorkExecutor.java b/solr/solrj/src/java/org/apache/solr/common/ParWorkExecutor.java
index f48d740..df6ad7f 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ParWorkExecutor.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ParWorkExecutor.java
@@ -49,30 +49,7 @@ public class ParWorkExecutor extends ThreadPoolExecutor {
   public ParWorkExecutor(String name, int corePoolsSize, int maxPoolsSize,
       int keepalive, BlockingQueue<Runnable> workQueue) {
     super(corePoolsSize, maxPoolsSize, keepalive, TimeUnit.MILLISECONDS, workQueue
-    , new ThreadFactory() {
-
-          @Override
-          public Thread newThread(Runnable r) {
-            ThreadGroup group;
-
-            SecurityManager s = System.getSecurityManager();
-            group = (s != null)? s.getThreadGroup() :
-                Thread.currentThread().getThreadGroup();
-
-            Thread t = new Thread(group,
-                name + threadNumber.getAndIncrement()) {
-              public void run() {
-                try {
-                  r.run();
-                } finally {
-                  ParWork.closeExecutor();
-                }
-              }
-            };
-            t.setDaemon(true);
-            return t;
-          }
-        });
+    , new ParWorkThreadFactory(name));
   }
 
   public void shutdown() {
@@ -95,4 +72,35 @@ public class ParWorkExecutor extends ThreadPoolExecutor {
   public void closeLock(boolean lock) {
     this.closeLock = lock;
   }
+
+  private static class ParWorkThreadFactory implements ThreadFactory {
+
+    private final String name;
+
+    public ParWorkThreadFactory(String name) {
+      this.name = name;
+    }
+
+    @Override
+    public Thread newThread(Runnable r) {
+      ThreadGroup group;
+
+      SecurityManager s = System.getSecurityManager();
+      group = (s != null)? s.getThreadGroup() :
+          Thread.currentThread().getThreadGroup();
+
+      Thread t = new Thread(group,
+          name + threadNumber.getAndIncrement()) {
+        public void run() {
+          try {
+            r.run();
+          } finally {
+            ParWork.closeExecutor();
+          }
+        }
+      };
+      t.setDaemon(true);
+      return t;
+    }
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ExecutorUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/ExecutorUtil.java
index 26dafcb..d158df7 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ExecutorUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ExecutorUtil.java
@@ -84,9 +84,10 @@ public class ExecutorUtil {
     do {
       try {
         // Wait a while for existing tasks to terminate
-        shutdown = pool.awaitTermination(60, TimeUnit.SECONDS);
+        shutdown = pool.awaitTermination(30, TimeUnit.SECONDS);
       } catch (InterruptedException ie) {
         interrupted = true;
+        break;
       }
     } while (shutdown == false);