以下是一个线程池的代码:
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) {}
    }
}
****************************目的:接受请求后,将请求放入一个先进先出的队列,然后挨个取出来交给线程池处理问题:上面的线程池该如何修改才能实现目的?

解决方案 »

  1.   

    java下的Queue应该可以,同时你也可以自己设计一个简单的队列
      

  2.   

    主要问题不是线程池和列队的小问题主要问题是你的代码太~~~长了而且应该插入JAVA原代码更好些  看着太累  谁会花时间一行一行读啊~~帮你贴一下
    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) {} 
        } 

    **************************** 
      

  3.   

    Java 类库中有现成的线程池,参见 java.util.concurrent.ThreadPoolExecutor。