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><prefix>-<pool number>-thread-<thread number></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; + } + + } + +}
