スレッドプール基礎学習


SimpleThread
package com.threadpool;

import java.util.Vector;

public class SimpleThread extends Thread
{
	/**
	 *  
	 */
	private boolean runningTag;
	/**
	 *  
	 */
	private String argument;
private int threadNumber;
	/**
	 *  
	 * 
	 * @return
	 */
	public boolean isRunningTag()
	{
		return runningTag;
	}

	public synchronized void setRunningTag(boolean runningTag)
	{
		this.runningTag = runningTag;
		if (runningTag)
			this.notify();

	}

	public String getArgument()
	{
		return this.argument;
	}

	public void setArgument(String argument)
	{
		this.argument = argument;
	}

	public SimpleThread(int threadNumber)
	{
		this.threadNumber=threadNumber;
		runningTag = false;
		System.out.println("Thread " + threadNumber + " started.");

	}

	public synchronized void run()
	{
		try
		{
			while (true)
			{
				if (!runningTag)
				{
					this.wait();// 
					// TODO Auto-generated catch block
				}
				else
				{
					System.out.println("processing " + getArgument() + "...done");
					Thread.sleep(5000);
					setRunningTag(false);
					System.out.println(threadNumber +" Thread is sleeping...");
				}
			}

		}
		catch(Exception e)
		{
			System.out.println("Interrupt");
			// TODO: handle exception
		}

	}
}

 
TestThreadPool
package com.threadpool;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestThreadPool
{

	/**
	 * 
	 * @param args
	 */

	public static void main(String[] args)
	{
		try
		{
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String s;
			ThreadPoolManager manager = new ThreadPoolManager(10);

			while (( s = br.readLine() ) != null)
			{
				manager.process(s);
			}
		}
		catch(IOException e)
		{
		}
	}
}

 
ThreadPoolManager
package com.threadpool;

import java.util.Vector;

public class ThreadPoolManager
{
	/**
	 *  
	 */
	private int maxThread;
	/**
	 *  vector
	 */
	private Vector vector;

	/**
	 *  
	 * 
	 * @param threadCount
	 */
	public void setMaxThread(int threadCount)
	{
		this.maxThread = threadCount;
	}

	public ThreadPoolManager(int threadCount)
	{
		this.setMaxThread(threadCount);
		System.out.println("Starting thread pool...");
		vector = new Vector();
		for (int i = 0 ; i < 10 ; i++)
		{
			SimpleThread thread = new SimpleThread(i);
			vector.addElement(thread);
			thread.start();

		}

	}

	public void process(String argument)
	{
		int i;
		for (i = 0 ; i < vector.size() ; i++)
		{
			SimpleThread simpleThread = (SimpleThread) vector.elementAt(i);
			if (!simpleThread.isRunningTag())
			{
				System.out.println("Thread " + ( i + 1 ) + " is processing:" + argument);
				simpleThread.setArgument(argument);
				simpleThread.setRunningTag(true);
				return;
			}
		}
		if (i == vector.size())
		{
			System.out.println("pool is full,try in another time.");
		}
	}
}