首页 > 代码库 > Java 线程池的实现

Java 线程池的实现

线程池的实现

   组成

    一个比较简单的线程池至少应包括

        线程池管理器:创建、销毁并管理线程池,将工作线程放入线程池中;

        工作线程:一个可以循环执行任务的线程,在没有任务时进行等待;

        任务队列:提供一种缓冲机制,将没有处理的任务放在任务队列中;

        任务接口:每个任务必须实现的接口,主要用来规定任务的入口、任务执行完后的收尾工作、任务的执行状态等。 工作线程通过该接口调度任务的执行。

   原理

   类似于操作系统中的缓冲区,流程如下:

   先启动若干数量的线程,并让这些线程都处于等待状态,当客户端有一个新请求时,就会唤醒线程池中的某一个等待线程,让他来处理客户端的这个请求,当处理完后,继续处于等待状态。

代码实现

   

package thread;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class threadpool {            static class ThreadPoolManager{            private int MaxThread;            private Vector ThreadQueue;                        public void setMaxThread(int count){                this.MaxThread=count;            }                        public ThreadPoolManager(int count){                setMaxThread(count);                System.out.println("Starting Thread Pool");                ThreadQueue=new Vector();                for(int i=0;i<=MaxThread;i++){                    SimpleThread thread=new SimpleThread(i);                    ThreadQueue.addElement(thread);                    thread.start();                }            }                        public void process(String argument){                int i;                for(i=0;i<ThreadQueue.size();i++){                    SimpleThread current=(SimpleThread) ThreadQueue.elementAt(i);                    if(!current.isRunning()){                        System.out.println("Thread"+(i+1)+"is processing:"+argument);                        current.setArgument(argument);                        current.setRunning(true);                        return;                    }                }                                if(i==ThreadQueue.size()){                    System.out.println("pool is full,try in anthor time");                }            }                }            static 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;        }                public void setArgument(String string){            argument=string;        }                public SimpleThread(int threadNumber){            RunningFlag=false;            System.out.println("thread"+threadNumber+"started.");        }                public synchronized void run(){            try {                while(true){                    if(!RunningFlag){                        this.wait();                    }                    else{                        System.out.println("process"+getArgument()+"……done!");                        sleep(5000);                        System.out.println("Thread is sleeping.");                        setRunning(false);                                            }                }            } catch (Exception e) {                // TODO: handle exception                System.out.println("Interrupt");            }        }    }        public static void main(String[] args) {        try {            BufferedReader brBufferedReader=new BufferedReader(new InputStreamReader(System.in));            String string;            ThreadPoolManager manager=new ThreadPoolManager(10);            while((string=brBufferedReader.readLine())!=null){                manager.process(string);            }        } catch (Exception e) {            // TODO: handle exception        }    }        }

 

   

   

 

Java 线程池的实现