公司网站换服务器怎么做,西宁网站制作哪家公司好,建筑八大员培训机构,国外域名怎么购买题目
想要服务器不停止#xff0c;能接收很多客户上传的图片#xff1f;我们知道是使用循环加多线程的方案来解决#xff0c;但是如果频繁的创建和销毁线程#xff0c;是非常浪费系统资源的#xff0c;那应该怎么办呢#xff1f;
解决方案
采用线程池#xff0c;来管…题目
想要服务器不停止能接收很多客户上传的图片我们知道是使用循环加多线程的方案来解决但是如果频繁的创建和销毁线程是非常浪费系统资源的那应该怎么办呢
解决方案
采用线程池来管理线程
代码实战
客户端代码
package com.heima;import java.io.*;
import java.net.Socket;public class Client {public static void main(String[] args) throws IOException {Socket socket new Socket(127.0.0.1,10000);//读取本地文件中的数据并写到服务器中BufferedInputStream bis new BufferedInputStream(new FileInputStream(G:\\wjkwk\\clientdir\\123.jpg));BufferedOutputStream bos new BufferedOutputStream(socket.getOutputStream());byte[] bytes new byte[1024];int len;while ((len bis.read(bytes)) ! -1){bos.write(bytes,0,len);}//往服务器写结束标记socket.shutdownOutput();//接收服务器返回的数据BufferedReader br new BufferedReader(new InputStreamReader(socket.getInputStream()));String line br.readLine();System.out.println(line);socket.close();}
}
服务端代码
package com.heima;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;public class Server {public static void main(String[] args) throws IOException {ThreadPoolExecutor pool new ThreadPoolExecutor(3,16,60,TimeUnit.SECONDS,new ArrayBlockingQueue(2),//Executors.defaultThreadFactory(),//线程工厂让线程池如何创建线程对象new ThreadPoolExecutor.AbortPolicy()//阻塞队列);ServerSocket serverSocket new ServerSocket(10000);while (true){//等待客户端来连接Socket socket serverSocket.accept();//开启一个线程//一个用户就对应服务端的一条线程
// new Thread(new MyRunnable(socket)).start();//使用线程池pool.submit(new MyRunnable(socket));}}
}
package com.heima;import java.io.*;
import java.net.Socket;
import java.util.UUID;public class MyRunnable implements Runnable {Socket socket;public MyRunnable(Socket socket){this.socket socket;}Overridepublic void run() {try {//读取客户端上传的文件并保存到本地BufferedInputStream bis new BufferedInputStream(socket.getInputStream());String name UUID.randomUUID().toString().replace(-, );BufferedOutputStream bos new BufferedOutputStream(new FileOutputStream(G:\\wjkwk\\serverdir\\name.jpg));int len;byte[] bytes new byte[1024];while ((len bis.read(bytes)) ! -1){bos.write(bytes,0,len);}//回写数据BufferedWriter bw new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bw.write(上传成功);bw.newLine();bw.flush();} catch (IOException e) {e.printStackTrace();} finally {//释放资源try {socket.close();} catch (IOException e) {e.printStackTrace();}}}
}