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);