diff src/fschmidt/util/executor/ThreadPool.java @ 68:00520880ad02

add fschmidt source
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Oct 2025 17:24:15 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/fschmidt/util/executor/ThreadPool.java	Sun Oct 05 17:24:15 2025 -0600
@@ -0,0 +1,52 @@
+package fschmidt.util.executor;
+
+import java.util.Queue;
+import java.util.LinkedList;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public final class ThreadPool extends AbstractThreadPool implements Executor {
+	private static final Logger logger = LoggerFactory.getLogger(ThreadPool.class);
+
+	private final Queue<Runnable> queue = new LinkedList<Runnable>();
+
+	public ThreadPool(int size) {
+		super(size);
+		start();
+	}
+
+	@Override public final void execute(Runnable command) {
+		dispatch(command);
+	}
+
+	public final synchronized boolean dispatch(Runnable command) {
+		if( !isRunning() )
+			return false;
+		queue.add(wrap(command));
+		notify();
+		return true;
+	}
+
+	@Override synchronized Runnable getCommand() {
+		Runnable command;
+		while( (command = queue.poll()) == null ) {
+			if( !isRunning() )
+				return null;
+			try {
+				wait();
+			} catch(InterruptedException e) {
+				logger.error("",e);
+			}
+		}
+		return command;
+	}
+
+	@Override public final synchronized int getQueueSize() {
+		return queue.size();
+	}
+
+}