以下是一个线程池的代码:
import java.util.*;class ThreadPoolManager {
private int maxThread;
public Vector vector;
public void setMaxThread(int threadCount) {
} //设定能控制的最大线程数
public ThreadPoolManager(int threadCount) {
setMaxThread(threadCount);
System.out.println("*开启线程池...共有" + threadCount + "个线程!");
vector = new Vector(); //循环监控各线程状态
for (int i = 1; i <= threadCount; i++) {
SimpleThread thread = new SimpleThread(i);
vector.addElement(thread); //vector用于存放SimpleThread类
thread.start(); //启动该线程
}
} //从vector数组中选取SimpleThread线程,监控其状态
public void process(String argument) {
int i;
for (i = 0; i < vector.size(); i++) {
SimpleThread currentThread = (SimpleThread) vector.elementAt(i); //如果处于激活状态的话,那继续查找vector数组的下一项
if (!currentThread.isRunning()) {
System.out.println("*线程" + (i + 1) + " 正在启动...");// +
//argument);
currentThread.setArgument(argument); //将argument转发给SimpleThread类的setArgument()方法进行处理
currentThread.setRunning(true); //唤醒当前线程
return;
}
}
if (i == vector.size()) {
System.out.println("*线程池已满, 等待后重试...");
}
}
}
*********************************************
class SimpleThread extends Thread {
private boolean runningFlag; //标记线程状态
private String argument; //获取输入内容
public boolean isRunning() {
return runningFlag;
} //控制线程状态
public synchronized void setRunning(boolean flag) {
runningFlag = flag;
if (flag)
this.notify();
}
public String getArgument() {
return this.argument;
} //argument获取输入内容
public void setArgument(String string) {
argument = string;
} //提示线程状态
public SimpleThread(int threadNumber) {
runningFlag = false;
System.out.println("线程 " + threadNumber + "准备...");
} //实现Thread类的run()接口
public synchronized void run() {
try {
while (true) {
if (!runningFlag) {
this.wait(); //线程调用wait()方法时,则线程进入睡眠状态
} else {
System.out.println("*线程正在处理:" + getArgument());
sleep(5000); //5秒后结束该线程
System.out.println("*线程" + getArgument() + "已休眠...");
setRunning(false);
}
}
} catch (InterruptedException e) {
System.out.println("Interrupt");
}
}
}
********************************************
import java.io.*;public class TestThreadPool {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.
in));//监控输入
String s;
ThreadPoolManager manager = new ThreadPoolManager(20); //调用ThreadPoolManager类创建线程
while ((s = br.readLine()) != null) {
manager.process(s);
}
} catch (IOException e) {}
}
}
****************************目的:接受请求后,将请求放入一个先进先出的队列,然后挨个取出来交给线程池处理问题:上面的线程池该如何修改才能实现目的?
import java.util.*;class ThreadPoolManager {
private int maxThread;
public Vector vector;
public void setMaxThread(int threadCount) {
} //设定能控制的最大线程数
public ThreadPoolManager(int threadCount) {
setMaxThread(threadCount);
System.out.println("*开启线程池...共有" + threadCount + "个线程!");
vector = new Vector(); //循环监控各线程状态
for (int i = 1; i <= threadCount; i++) {
SimpleThread thread = new SimpleThread(i);
vector.addElement(thread); //vector用于存放SimpleThread类
thread.start(); //启动该线程
}
} //从vector数组中选取SimpleThread线程,监控其状态
public void process(String argument) {
int i;
for (i = 0; i < vector.size(); i++) {
SimpleThread currentThread = (SimpleThread) vector.elementAt(i); //如果处于激活状态的话,那继续查找vector数组的下一项
if (!currentThread.isRunning()) {
System.out.println("*线程" + (i + 1) + " 正在启动...");// +
//argument);
currentThread.setArgument(argument); //将argument转发给SimpleThread类的setArgument()方法进行处理
currentThread.setRunning(true); //唤醒当前线程
return;
}
}
if (i == vector.size()) {
System.out.println("*线程池已满, 等待后重试...");
}
}
}
*********************************************
class SimpleThread extends Thread {
private boolean runningFlag; //标记线程状态
private String argument; //获取输入内容
public boolean isRunning() {
return runningFlag;
} //控制线程状态
public synchronized void setRunning(boolean flag) {
runningFlag = flag;
if (flag)
this.notify();
}
public String getArgument() {
return this.argument;
} //argument获取输入内容
public void setArgument(String string) {
argument = string;
} //提示线程状态
public SimpleThread(int threadNumber) {
runningFlag = false;
System.out.println("线程 " + threadNumber + "准备...");
} //实现Thread类的run()接口
public synchronized void run() {
try {
while (true) {
if (!runningFlag) {
this.wait(); //线程调用wait()方法时,则线程进入睡眠状态
} else {
System.out.println("*线程正在处理:" + getArgument());
sleep(5000); //5秒后结束该线程
System.out.println("*线程" + getArgument() + "已休眠...");
setRunning(false);
}
}
} catch (InterruptedException e) {
System.out.println("Interrupt");
}
}
}
********************************************
import java.io.*;public class TestThreadPool {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.
in));//监控输入
String s;
ThreadPoolManager manager = new ThreadPoolManager(20); //调用ThreadPoolManager类创建线程
while ((s = br.readLine()) != null) {
manager.process(s);
}
} catch (IOException e) {}
}
}
****************************目的:接受请求后,将请求放入一个先进先出的队列,然后挨个取出来交给线程池处理问题:上面的线程池该如何修改才能实现目的?
import java.util.*; class ThreadPoolManager {
private int maxThread;
public Vector vector;
public void setMaxThread(int threadCount) {
} //设定能控制的最大线程数
public ThreadPoolManager(int threadCount) {
setMaxThread(threadCount);
System.out.println("*开启线程池...共有" + threadCount + "个线程!");
vector = new Vector(); //循环监控各线程状态
for (int i = 1; i <= threadCount; i++) {
SimpleThread thread = new SimpleThread(i);
vector.addElement(thread); //vector用于存放SimpleThread类
thread.start(); //启动该线程
}
} //从vector数组中选取SimpleThread线程,监控其状态
public void process(String argument) {
int i;
for (i = 0; i < vector.size(); i++) {
SimpleThread currentThread = (SimpleThread) vector.elementAt(i); //如果处于激活状态的话,那继续查找vector数组的下一项
if (!currentThread.isRunning()) {
System.out.println("*线程" + (i + 1) + " 正在启动...");// +
//argument);
currentThread.setArgument(argument); //将argument转发给SimpleThread类的setArgument()方法进行处理
currentThread.setRunning(true); //唤醒当前线程
return;
}
}
if (i == vector.size()) {
System.out.println("*线程池已满, 等待后重试...");
}
}
}
*********************************************
class SimpleThread extends Thread {
private boolean runningFlag; //标记线程状态
private String argument; //获取输入内容
public boolean isRunning() {
return runningFlag;
} //控制线程状态
public synchronized void setRunning(boolean flag) {
runningFlag = flag;
if (flag)
this.notify();
}
public String getArgument() {
return this.argument;
} //argument获取输入内容
public void setArgument(String string) {
argument = string;
} //提示线程状态
public SimpleThread(int threadNumber) {
runningFlag = false;
System.out.println("线程 " + threadNumber + "准备...");
} //实现Thread类的run()接口
public synchronized void run() {
try {
while (true) {
if (!runningFlag) {
this.wait(); //线程调用wait()方法时,则线程进入睡眠状态
} else {
System.out.println("*线程正在处理:" + getArgument());
sleep(5000); //5秒后结束该线程
System.out.println("*线程" + getArgument() + "已休眠...");
setRunning(false);
}
}
} catch (InterruptedException e) {
System.out.println("Interrupt");
}
}
}
********************************************
import java.io.*; public class TestThreadPool {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.
in));//监控输入
String s;
ThreadPoolManager manager = new ThreadPoolManager(20); //调用ThreadPoolManager类创建线程
while ((s = br.readLine()) != null) {
manager.process(s);
}
} catch (IOException e) {}
}
}
****************************