首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

服务端的线程池提案2

2014-01-08 
服务端的线程池方案2  Java提供了一个很好地类来实现1中的线程池功能就是Executors类。将服务端代码改变一

服务端的线程池方案2

  Java提供了一个很好地类来实现1中的线程池功能就是Executors类。将服务端代码改变一下就OK了。当然了,ReceiveFile类还需要改变一下(实现一个Runnable接口,并将receiveFile方法的内容写到run方法中,删除receiveFile方法即可)。

package com.wjy.threadpool;import java.io.BufferedInputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.*;import com.wjy.receivefile.ReceiveFile;public class ThreadPool {    private int port;    private int poolSize=0;    private ServerSocket server;            public ThreadPool(int port, int poolSize) {        super();        this.port = port;        this.poolSize = poolSize;    }    private void startServer(){        try {            server=new ServerSocket(port);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }        private int fileNum(){        int result=(int)(Math.random()*10);        return result;    }    public void startThreadPool(){        startServer();        Executor service=Executors.newCachedThreadPool();        while(true){            try {                Socket client=server.accept();                int num=fileNum();                System.out.println(num);                BufferedInputStream inputStream=new BufferedInputStream(client.getInputStream());                                Thread.sleep(15000);                service.execute(new ReceiveFile(inputStream, "E://receive/"+num+".txt"));            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (InterruptedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }                    }//        for(int i=0;i<poolSize;i++){//            Thread thread=new Thread(){//                public void run(){//                    while(true){//                        try {//                            Socket client=server.accept();//                            int num=fileNum();//                            System.out.println(num);//                            BufferedInputStream inputStream=new BufferedInputStream(client.getInputStream());//                            ReceiveFile receiveFile=new ReceiveFile(inputStream, "E://receive/"+num+".txt");//                            Thread.sleep(15000);//                            receiveFile.receiveFile();//                        } catch (Exception e) {//                            e.printStackTrace();//                        }//                    }//                }//            };//            thread.start();//        }    }}

?

接受文件的类:

package com.wjy.receivefile;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class ReceiveFile implements Runnable{    private int buffSize=1024;    private BufferedInputStream conveyInputStream;    private BufferedOutputStream fileOutputStream;        public void setBuffSize(int buffSize) {        this.buffSize = buffSize;    }    public ReceiveFile(BufferedInputStream conveyInputStream, String filePath) {        super();        this.conveyInputStream = conveyInputStream;        try {            this.fileOutputStream=new BufferedOutputStream(new FileOutputStream(new File(filePath)));        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    //    public void receiveFile(){//        byte buff[]=new byte[buffSize];//        try {//            while((conveyInputStream.read(buff, 1, buffSize-1))!=-1){//                fileOutputStream.write(buff, 1, buffSize-1);//            }//            conveyInputStream.close();//            fileOutputStream.close();//        } catch (IOException e) {//            // TODO Auto-generated catch block//            e.printStackTrace();//        }//    }    @Override    public void run() {        // TODO Auto-generated method stub        byte buff[]=new byte[buffSize];        try {            while((conveyInputStream.read(buff, 1, buffSize-1))!=-1){                fileOutputStream.write(buff, 1, buffSize-1);            }            conveyInputStream.close();            fileOutputStream.close();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        }    }

?

热点排行