All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.barchart.udt.nio.ConnectorThreadPoolUDT Maven / Gradle / Ivy

/**
 * Copyright (C) 2009-2012 Barchart, Inc. 
 *
 * All rights reserved. Licensed under the OSI BSD License.
 *
 * http://www.opensource.org/licenses/bsd-license.php
 */
package com.barchart.udt.nio;

import java.net.InetSocketAddress;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;

class ConnectorThreadPoolUDT {

	final ConnectorThreadFactoryUDT factory;

	final Queue readyQueue = //
	new ConcurrentLinkedQueue();

	final ConcurrentMap taskMap = //
	new ConcurrentHashMap();

	final ExecutorService service;

	final String THREAD_PREFIX = "UDT Connector #";

	final int THREAD_PRIORITY = Thread.NORM_PRIORITY;

	final int THREAD_TIME_KEEP = 3 * 1000;
	final TimeUnit THREAD_TIME_UNIT = TimeUnit.MILLISECONDS;

	ConnectorThreadPoolUDT(int maximumPoolSize) {

		factory = new ConnectorThreadFactoryUDT(THREAD_PREFIX, THREAD_PRIORITY);

		// service = Executors.newCachedThreadPool();

		service = ConnectorExecutorsUDT.newDynamicThreadPool(//
				maximumPoolSize, //
				THREAD_TIME_KEEP, //
				THREAD_TIME_UNIT, //
				factory);

	}

	void submitRequest(SelectionKeyUDT keyUDT, InetSocketAddress remote) {

		if (taskMap.containsKey(keyUDT)) {
			return;
		}

		Runnable task = new ConnectorTaskUDT(//
				keyUDT, taskMap, readyQueue, remote);

		Runnable result = taskMap.putIfAbsent(keyUDT, task);

		if (result == null) {
			service.submit(task);
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy