スレッドプール基礎学習
3919 ワード
SimpleThread
TestThreadPool
ThreadPoolManager
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.");
}
}
}