首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

Thread與Socket阻塞,该如何解决

2012-01-21 
Thread與Socket阻塞現在在做一個多線程與Socket配合的問題﹐現在在接受數據端老是過2到3個小時就有一條線程

Thread與Socket阻塞
現在在做一個多線程與Socket配合的問題﹐現在在接受數據端老是過2到3個小時就有一條線程死掉﹐還有兩個類一個是界面啟動線程的﹐一個是對接收數據處理﹐這段程試是兩個死循環﹐外循環是不斷監聽是否有數據傳過來﹐內循環是在數據庫里搜索數據什么處理完并返回信息。望高手能給我點意見﹐不勝感激﹗

public   void   run()
{
try
{
  String   readMess= " ";
  client=null;
                                in=null;
                                out=null;
                                client   =new   Socket(ip,port);
                                //client   =new   Socket( "10.242.10.75 ",4660);
                            System.out.println(line+ "     CONNECTION   OK! ");
                            out   =   new   DataOutputStream(client.getOutputStream());
                                in   =   new   DataInputStream(client.getInputStream());
                                flag=true;
while(true)  
{
                    /*
                    if(in.available()==0)
                    {
                    //break;
                    continue;
                    }
                    */
          System.out.print(line);
          System.out.println(client.isConnected());
          readMess=in.readLine().trim();
          //System.out.println(readMess);
          if(readMess.equals( " ")||readMess==null)
          {  
          System.out.println( "while   end! ");
                    break;
          }
                                                  else
                                                {
                                                      if(!client.isConnected())
                                                      {


                                                        System.out.println(line+ "   is   no   connection! ");
                                                      }
                                                      id=trans.getID(readMess);
              strData=trans.getData(readMess);
              //System.out.println(id+ "     data=   "+strData);
              insert_RCV_Data(strData,id);
              int   count=0;
              while(true)
                                                    {
                                                    int   getflag=get_send_flag(id);
                                                    if(getflag==0)
                                                    {
                                                    sleep(150);
                                                    count++;
                                                    if(count==20)
                                                    {
                                                   
                                                              try  
                {
                        Statement   stmt=con.createStatement();
                        String   strsqlupdate= "update   SYS_DATA_CHANNEL   set   flag=4   where   id= "+id+ "   and   flag=0 ";


                        stmt.executeUpdate(strsqlupdate);
                        stmt.close();
                       
                }   catch(Exception   ex)  
                {
                        System.out.println( "errorUpdate   :   "+ex.getMessage());
                }
      break;
                                                    }
                                                    }
                                                    else   if(getflag==1||getflag==2)
                                                    {
                                                    trans.sendData(out,strData,id,false);
                                                            this.data.insertElementAt( "ID: "+id+ "     Data: "+strData,0);
                                                            get_send_Data();
                                                            break;
                                                    }
                                                    }
                                                   
                                                }  
                        }
}
catch(Exception   e)
{
System.out.println(ip+ "     Thread   run   error   : "+e.getMessage());
}
}

------解决方案--------------------


我帮你顶
[解决办法]
设定timeout

热点排行