This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.commons.threads-2.0.2-incubator in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-threads.git
commit f8c7fb77fc8d5ee384cdfda92254ee0d3597b775 Author: Carsten Ziegeler <[email protected]> AuthorDate: Mon Feb 18 14:55:27 2008 +0000 Use jvm default thread factory and always provide priority and daemon settings. git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/sling/threads@628769 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/threads/impl/DefaultThreadFactory.java | 79 ---------------------- .../sling/threads/impl/DefaultThreadPool.java | 27 +++----- .../sling/threads/impl/ExtendedThreadFactory.java | 64 ++++++++++-------- 3 files changed, 42 insertions(+), 128 deletions(-) diff --git a/src/main/java/org/apache/sling/threads/impl/DefaultThreadFactory.java b/src/main/java/org/apache/sling/threads/impl/DefaultThreadFactory.java deleted file mode 100644 index 2cffa80..0000000 --- a/src/main/java/org/apache/sling/threads/impl/DefaultThreadFactory.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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.sling.threads.impl; - - -/** - * This class is responsible to create new Thread instances. - * It's a very basic implementation. - * - * @version $Id$ - */ -public class DefaultThreadFactory - implements ExtendedThreadFactory { - - /** The daemon mode */ - private boolean isDaemon = DefaultThreadPoolManager.DEFAULT_DAEMON_MODE; - - /** The priority of newly created Threads */ - private int priority = DefaultThreadPoolManager.DEFAULT_THREAD_PRIORITY; - - /** - * @see org.apache.sling.threads.impl.ExtendedThreadFactory#setDaemon(boolean) - */ - public void setDaemon( boolean isDaemon ) { - this.isDaemon = isDaemon; - } - - /** - * @see org.apache.sling.threads.impl.ExtendedThreadFactory#isDaemon() - */ - public boolean isDaemon() { - return this.isDaemon; - } - - /** - * @see org.apache.sling.threads.impl.ExtendedThreadFactory#setPriority(int) - */ - public void setPriority( final int priority ) { - if( ( Thread.MAX_PRIORITY == priority ) || - ( Thread.MIN_PRIORITY == priority ) || - ( Thread.NORM_PRIORITY == priority ) ) { - this.priority = priority; - } else { - throw new IllegalStateException("Unknown priority " + priority); - } - } - - /** - * @see org.apache.sling.threads.impl.ExtendedThreadFactory#getPriority() - */ - public int getPriority() { - return this.priority; - } - - /** - * @see org.apache.sling.threads.impl.ExtendedThreadFactory#newThread(java.lang.Runnable) - */ - public Thread newThread( final Runnable command ) { - final Thread thread = new Thread( command ); - thread.setPriority( this.priority ); - thread.setDaemon( this.isDaemon ); - - return thread; - } -} diff --git a/src/main/java/org/apache/sling/threads/impl/DefaultThreadPool.java b/src/main/java/org/apache/sling/threads/impl/DefaultThreadPool.java index f685c15..37289bd 100644 --- a/src/main/java/org/apache/sling/threads/impl/DefaultThreadPool.java +++ b/src/main/java/org/apache/sling/threads/impl/DefaultThreadPool.java @@ -17,6 +17,7 @@ package org.apache.sling.threads.impl; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.SynchronousQueue; @@ -80,15 +81,14 @@ public class DefaultThreadPool } // factory - final ThreadFactory threadFactory; + final ThreadFactory delegateThreadFactory; if (factory == null) { - logger.warn("No ThreadFactory is configured. Will use a " - + DefaultThreadFactory.class.getName()); - threadFactory = new DefaultThreadFactory(); + logger.warn("No ThreadFactory is configured. Will use JVM default thread factory." + + ExtendedThreadFactory.class.getName()); + delegateThreadFactory = Executors.defaultThreadFactory(); } else { - threadFactory = factory; + delegateThreadFactory = factory; } - // Min pool size // make sure we have enough threads for the default thread pool as we // need one for ourself @@ -102,19 +102,8 @@ public class DefaultThreadPool // Max pool size maxPoolSize = (maxPoolSize < 0) ? Integer.MAX_VALUE : maxPoolSize; - // Set priority and daemon if the factory is an extended factory - if ( threadFactory instanceof ExtendedThreadFactory ) { - final ExtendedThreadFactory extTF = (ExtendedThreadFactory)threadFactory; - extTF.setPriority(priority); - extTF.setDaemon(isDaemon); - } else { - if ( priority != Thread.NORM_PRIORITY ) { - this.logger.warn("ThreadFactory " + threadFactory + " does not support setting the priority or daemon setting."); - } - if ( isDaemon != DefaultThreadPoolManager.DEFAULT_DAEMON_MODE ) { - this.logger.warn("ThreadFactory " + threadFactory + " does not support setting the daemon mode."); - } - } + // Set priority and daemon flag + final ExtendedThreadFactory threadFactory = new ExtendedThreadFactory(delegateThreadFactory, priority, isDaemon); // Keep alive time if (keepAliveTime < 0) { diff --git a/src/main/java/org/apache/sling/threads/impl/ExtendedThreadFactory.java b/src/main/java/org/apache/sling/threads/impl/ExtendedThreadFactory.java index 5ad586f..7a030a7 100644 --- a/src/main/java/org/apache/sling/threads/impl/ExtendedThreadFactory.java +++ b/src/main/java/org/apache/sling/threads/impl/ExtendedThreadFactory.java @@ -18,50 +18,54 @@ package org.apache.sling.threads.impl; import java.util.concurrent.ThreadFactory; + /** - * This is an extension to the {@link ThreadFactory}. + * This class is responsible to create new Thread instances. + * It's a very basic implementation. * * @version $Id$ */ -public interface ExtendedThreadFactory - extends ThreadFactory { +public final class ExtendedThreadFactory implements ThreadFactory { - /** - * Set the daemon mode of created <code>Thread</code>s should have - * - * @param isDaemon Whether new {@link Thread}s should run as daemons. - */ - void setDaemon( boolean isDaemon ); + /** The daemon mode */ + private final boolean isDaemon; - /** - * Get the daemon mode created <code>Thread</code>s will have - * - * @return Whether new {@link Thread}s should run as daemons. - */ - boolean isDaemon(); + /** The priority of newly created Threads */ + private final int priority; + + /** The real factory. */ + private final ThreadFactory factory; /** - * Set the priority newly created <code>Thread</code>s should have + * Create a new wrapper for a thread factory handling the * * @param priority One of {@link Thread#MIN_PRIORITY}, {@link * Thread#NORM_PRIORITY}, {@link Thread#MAX_PRIORITY} + * @param isDaemon Whether new {@link Thread}s should run as daemons. */ - void setPriority( int priority ); + public ExtendedThreadFactory(final ThreadFactory factory, + final int priority, + final boolean isDaemon) { + this.isDaemon = isDaemon; + if( ( Thread.MAX_PRIORITY == priority ) || + ( Thread.MIN_PRIORITY == priority ) || + ( Thread.NORM_PRIORITY == priority ) ) { + this.priority = priority; + } else { + throw new IllegalStateException("Unknown priority " + priority); + } + this.factory = factory; + } /** - * Get the priority newly created <code>Thread</code>s will have - * - * @return One of {@link Thread#MIN_PRIORITY}, {@link - * Thread#NORM_PRIORITY}, {@link Thread#MAX_PRIORITY} + * Invoke the thread factory and set the daemon flag and priority. + * @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable) */ - int getPriority(); + public Thread newThread( final Runnable command ) { + final Thread thread = this.factory.newThread(command); + thread.setPriority( this.priority ); + thread.setDaemon( this.isDaemon ); - /** - * Create a new Thread for a {@link Runnable} command - * - * @param command The <code>Runnable</code> - * - * @return new <code>Thread</code> - */ - Thread newThread( Runnable command ); + return thread; + } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
