⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 echoserver.java

📁 线程池的开发,创建一个池来提高资源利用率
💻 JAVA
字号:
import java.io.*;
import java.net.*;

public class EchoServer{
	private int port=8000;
	private ServerSocket serverSocket;
	private ThreadPool threadPool;  //线程池
	private final int POOL_SIZE=4;  //单个CPU时线程池中工作线程的数目 
	  
	public EchoServer() throws IOException
	{
		serverSocket=new ServerSocket(port);
		threadPool=new ThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
		
		System.out.println("服务器启动");
	}
	
	public void service()
	{
		while(true)
		{
			Socket socket=null;
			try{
				socket=serverSocket.accept();
				System.out.println("accept");
				threadPool.execute(new Handler(socket));  //把与客户客户通信的任务交给线程池
			}catch(IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	
	
	public static void main(String args[])throws IOException
	{
		new EchoServer().service();
	}
}

class Handler implements Runnable  //负责与单个客户通信
{
	private Socket socket;
	public Handler(Socket socket)
	{
		this.socket=socket;
	}
	
	private PrintWriter getWriter(Socket socket) throws IOException
	{
		OutputStream socketOut=socket.getOutputStream();
		return new  PrintWriter(socketOut,true);
	}
	
	private BufferedReader getReader(Socket socket)throws IOException
	{
		InputStream socketIn=socket.getInputStream();
		return new BufferedReader(new InputStreamReader(socketIn));
	}
	public String echo(String msg)
	{
		return "echo:"+msg;
	}
	
	public void run()
	{
		try{
				System.out.println("task running");
			System.out.println("New connection accepted "+
			socket.getInetAddress()+":"+socket.getPort());
			BufferedReader br=getReader(socket);
			PrintWriter pw=getWriter(socket);
			
			String msg=null;
			while((msg=br.readLine())!=null)
			{
				System.out.println(msg);
				pw.println(echo(msg));
				if(msg.equals("bye"))
				break;
			}
		}catch(IOException e)
		{
			e.printStackTrace();
		}
		finally{
			try{
				if(socket!=null) socket.close();//断开连接
			}catch(IOException e){e.printStackTrace();}
		}
	}
}
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -