zoukankan      html  css  js  c++  java
  • 服务端的线程池方案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();
            }
        
        }
        
    
    }
  • 相关阅读:
    集合(双列)
    集合(单列)
    Struts2.0第三章(文件上传、ajax开发、json、Fastjson、Jackson、注解开发)
    Struts2.0第二章(封装数据获取请求参数、servlet api的获取、ServletActionContext、注入、ognl、valueStack、ActionContext、interceptor拦截器)
    Struts2.0第一章(struts2.0概述,使用步骤,执行流程,各配置文件介绍,Action详解)
    servlet3.0实现文件上传功能
    annotation注解
    ClassLoader类加载器
    Proxy 动态代理(在过滤器中对request使用动态代理解决接受参数乱码问题)
    Filter过滤器(自动登陆、通用的字符集编码的过滤【处理不同请求的乱码问题】、。。。)
  • 原文地址:https://www.cnblogs.com/wangjiyuan/p/xianchengchi2.html
Copyright © 2011-2022 走看看