Repository: karaf
Updated Branches:
  refs/heads/karaf-4.1.x 763b680e3 -> a35af8c38


Add NamedThreadFactory in util package. Used in FeaturesService for now


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/70c354de
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/70c354de
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/70c354de

Branch: refs/heads/karaf-4.1.x
Commit: 70c354de31e9e2e221f1dd5e282e1d6d7f04136a
Parents: 763b680
Author: Grzegorz Grzybek <[email protected]>
Authored: Tue Jun 6 20:37:03 2017 +0200
Committer: Grzegorz Grzybek <[email protected]>
Committed: Tue Jun 6 20:46:27 2017 +0200

----------------------------------------------------------------------
 .../internal/service/FeaturesServiceImpl.java   |  3 +-
 .../java/org/apache/karaf/util/ThreadUtils.java | 58 ++++++++++++++++++++
 2 files changed, 60 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/70c354de/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
index 02be751..19598bc 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java
@@ -63,6 +63,7 @@ import 
org.apache.karaf.features.internal.download.DownloadManagers;
 import org.apache.karaf.features.internal.region.DigraphHelper;
 import org.apache.karaf.features.internal.util.JsonReader;
 import org.apache.karaf.features.internal.util.JsonWriter;
+import org.apache.karaf.util.ThreadUtils;
 import org.apache.karaf.util.bundles.BundleUtils;
 import org.apache.karaf.util.collections.CopyOnWriteArrayIdentityList;
 import org.eclipse.equinox.region.Region;
@@ -253,7 +254,7 @@ public class FeaturesServiceImpl implements 
FeaturesService, Deployer.DeployCall
         this.scheduleMaxRun = scheduleMaxRun;
         this.blacklisted = blacklisted;
         this.configCfgStore = configCfgStore;
-        this.executor = Executors.newSingleThreadExecutor();
+        this.executor = 
Executors.newSingleThreadExecutor(ThreadUtils.namedThreadFactory("features"));
         loadState();
         checkResolve();
     }

http://git-wip-us.apache.org/repos/asf/karaf/blob/70c354de/util/src/main/java/org/apache/karaf/util/ThreadUtils.java
----------------------------------------------------------------------
diff --git a/util/src/main/java/org/apache/karaf/util/ThreadUtils.java 
b/util/src/main/java/org/apache/karaf/util/ThreadUtils.java
new file mode 100644
index 0000000..9ea69e3
--- /dev/null
+++ b/util/src/main/java/org/apache/karaf/util/ThreadUtils.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.karaf.util;
+
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class ThreadUtils {
+
+    /**
+     * Constructs threads with names <code>&lt;prefix&gt;-&lt;pool 
number&gt;-thread-&lt;thread number&gt;</code>.
+     * @param prefix prefix to be used for thread names created by this {@link 
ThreadFactory}
+     * @return
+     */
+    public static ThreadFactory namedThreadFactory(String prefix) {
+        return new NamedThreadFactory(prefix);
+    }
+
+    private static class NamedThreadFactory implements ThreadFactory {
+
+        private static final AtomicInteger poolNumber = new AtomicInteger(1);
+        private final ThreadGroup group;
+        private final AtomicInteger threadNumber = new AtomicInteger(1);
+        private final String namePrefix;
+
+        public NamedThreadFactory(String prefix) {
+            SecurityManager s = System.getSecurityManager();
+            group = (s != null) ? s.getThreadGroup() : 
Thread.currentThread().getThreadGroup();
+            namePrefix = prefix + "-" + poolNumber.getAndIncrement() + 
"-thread-";
+        }
+
+        @Override
+        public Thread newThread(Runnable r) {
+            Thread t = new Thread(group, r, namePrefix + 
threadNumber.getAndIncrement(), 0);
+            if (t.isDaemon())
+                t.setDaemon(false);
+            if (t.getPriority() != Thread.NORM_PRIORITY)
+                t.setPriority(Thread.NORM_PRIORITY);
+            return t;
+        }
+
+    }
+
+}

Reply via email to