public class MultiThreadServer { 
private int port=8821; 
private ServerSocket serverSocket; 
private ExecutorService executorService;//线程池 
private final int POOL_SIZE=10;//单个CPU线程池大小 public MultiThreadServer() throws IOException{ 
serverSocket=new ServerSocket(port); 
//Runtime的availableProcessor()方法返回当前系统的CPU数目. 
executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE); 
System.out.println("服务器启动"); 
} public void service(){ 
while(true){ 
Socket socket=null; 
try { 
//接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接 
socket=serverSocket.accept(); 
executorService.execute(new Handler(socket)); } catch (Exception e) { 
e.printStackTrace(); 


} public static void main(String[] args) throws IOException { 
new MultiThreadServer().service(); 
} } class Handler implements Runnable{ 
private Socket socket; 
public Handler(Socket socket){ 
this.socket=socket; 

/*private DataOutputStream dos(Socket socket) throws IOException{ 
OutputStream socketOut=socket.getOutputStream(); 
return new DataOutputStream(socketOut); 

private DataInputStream dis(Socket socket) throws IOException{ 
InputStream socketIn=socket.getInputStream(); 
return new DataInputStream(socketIn); 
}*/ public void run(){ 
try { 
System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort()); 
OutputStream os = socket.getOutputStream(); 
DataOutputStream dos = new DataOutputStream(os); InputStream is = socket.getInputStream( ); 
DataInputStream dis=new DataInputStream(is); 
new myserverread(dis).start(); 
new myserverwite(dos).start(); 
} catch (IOException e) { 
e.printStackTrace(); 
}/*finally{ 
try { 
if(socket!=null) 
socket.close(); 
} catch (IOException e) { 
e.printStackTrace(); 

}*/ 


class myserverread extends Thread{ 
private DataInputStream dis; 
public myserverread (DataInputStream dis){ 
this.dis=dis; 

public void run(){ 
String info; 
try{ 
while(true) 

info=dis.readUTF(); 
System.out.println("对方说"+info); 
if (info.equals("bye")){ 
System.out.println("对方下线,程序退出"); 
System.exit(0);} 


catch (Exception e){e.getStackTrace();} } 
} class myserverwite extends Thread{ 
private DataOutputStream dos; 
public myserverwite (DataOutputStream dos){ 
this.dos=dos; 

public void run(){ 
BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
String info; 
try{ 
while(true) 

info=br.readLine(); 
dos.writeUTF(info); 
if (info.equals("bye")){ 
System.out.println("自己下线,程序退出"); 
System.exit(0);} 


catch (Exception e){e.getStackTrace();} }