利用如下方法仍旧对有些请求不能及时回复,请教高手指点一种高效的线程管理方法public void run() {
    try {
   
    /* 创建工作空间 */
        Server work_space = new Server();
   
        //开始监听端口
    server=new ServerSocket(port);
   
    thread_pool = Executors.newFixedThreadPool(1000);
   
    while(true) {
   
    //获取当前的通信
    socket=server.accept(); 
   
    work_space.socket = socket;
   
    thread_pool.submit(work_space);
    } 
    } catch(Exception e) {
    e.printStackTrace();
    }
}

/***************************************************
 * <B>内部类</B>
 * <PRE>
 * 实现对服务器制定端口的监听的逻辑业务 
 * @2008/04/14
 * </PRE>
 * @version $Revision: 1.1 $ $Date: 2008/04/14 
 * @author  
 ****************************************************/
class Server implements Runnable{

//通讯类
        Socket socket = null; /**
 * 实现接口方法,实现逻辑业务
 * @param String clientMes
 * @return String[] message
 */
public void run() {
try{
   
//读取准备
System.out.println("连接上了!正在读取数据");
   
/* 接收客户端的信息 */
    String clientMes = null;
   
    /* 负责接受 */
    byte read_msg[] = new byte[600];
   
   
    InputStream input = socket.getInputStream();     System.out.println(socket.getPort());
   
    //读取数据
   
    input.read(read_msg);
   
    // 组装数据 
    StringBuffer ipphone_mes = new StringBuffer();
    for(int i=0;i<read_msg.length;i++){
    if(read_msg[i]!= 0){
    char c = (char)read_msg[i];
    ipphone_mes.append(c);
    }
    }
   
    //读取数据的字符串形式
    clientMes = ipphone_mes.toString(); 
   
    System.out.println("Client = " + clientMes);
    //获取当前操作类型,并做相应处理
    if(!clientMes.trim().equals("")){
    getCurrentStepThenDisposal(socket,clientMes);
    }     //input.close();
    //socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    你可以使用NIO中selector来解决这个问题。
      

  2.   

     Server 类不是这么写滴,应该这么写:        ServerSocket serverSocket = new ServerSocket(8088);
            while (true) {
                Socket socket = serverSocket.accept();
                Thread handler = new Handler(socket);
                System.out.println("服务端接受到连接...");
                handler.start();
            }