/*
* 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.synapse.util.concurrent;
import java.util.concurrent.*;
/**
* This is the executor service that will be returned by the env
*/
public class InboundThreadPool extends ThreadPoolExecutor {
// default values
public static final int INBOUND_CORE_THREADS = 20;
public static final int INBOUND_MAX_THREADS = 100;
public static final int INBOUND_KEEP_ALIVE = 1;
public static final int INBOUND_THREAD_QLEN = 1;
public static final String INBOUND_THREAD_GROUP = "inbound-thread-group";
public static final String INBOUND_THREAD_ID_PREFIX = "InboundWorker";
// property keys
public static final String IB_THREAD_CORE = "inbound.threads.core";
public static final String IB_THREAD_MAX = "inbound.threads.max";
/**
* Constructor for the Inbound thread poll
*
* @param corePoolSize - number of threads to keep in the pool, even if they are idle
* @param maximumPoolSize - the maximum number of threads to allow in the pool
* @param keepAliveTime - this is the maximum time that excess idle threads will wait
* for new tasks before terminating.
* @param unit - the time unit for the keepAliveTime argument.
* @param workQueue - the queue to use for holding tasks before they are executed.
*/
public InboundThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime,
TimeUnit unit, BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
new InboundThreadFactory(
new ThreadGroup(INBOUND_THREAD_GROUP), INBOUND_THREAD_ID_PREFIX));
}
/**
* Default Constructor for the thread pool and will use all the values as default
*/
public InboundThreadPool() {
this(INBOUND_CORE_THREADS, INBOUND_MAX_THREADS, INBOUND_KEEP_ALIVE,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
}
/**
* Constructor for the InboundThreadPool
*
* @param corePoolSize - number of threads to keep in the pool, even if they are idle
* @param maxPoolSize - the maximum number of threads to allow in the pool
* @param keepAliveTime - this is the maximum time that excess idle threads will wait
* for new tasks before terminating.
* @param qlen - Thread Blocking Queue length
* @param threadGroup - ThreadGroup name
* @param threadIdPrefix - Thread id prefix
*/
public InboundThreadPool(int corePoolSize, int maxPoolSize, long keepAliveTime, int qlen,
String threadGroup, String threadIdPrefix) {
super(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS,
qlen > 0 ? new LinkedBlockingQueue<Runnable>(qlen) : new LinkedBlockingQueue<Runnable>(),
new SynapseThreadFactory(new ThreadGroup(threadGroup), threadIdPrefix));
}
}