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

多線程Socket通信問題解决方案

2012-01-08 
多線程Socket通信問題現在在做一個多線程Socket通信問題﹐現在在接受數據端老是過2到3個小時就有一條線程死

多線程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)  
        {
          System.out.print(line);
          System.out.println(client.isConnected());
          readMess=in.readLine().trim();
          if(readMess.equals( " ")||readMess==null)
          {  
          System.out.println( "while   end! ");
                    break;
          }
            else
          {
              id=trans.getID(readMess);
              strData=trans.getData(readMess);
              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());
    }
  }

[解决办法]
現在在接受數據端老是過2到3個小時就有一條線程死掉

你的程序是不是产生死锁了?
为什么要用繁体?
[解决办法]
你这段代码里没有锁,不知如何会牵涉到 "死锁 ".
你的程序 "死掉 "具体是什么意思?
1. 内循环: get_send_flag 保证总是返回 0/1/2 之一,才能较好地保证内循环能终止
2. 外循环: if(readMess.equals( " ")||readMess==null) 有待研究详情
[解决办法]
先在线程结束的的时候打印些东西,看看是正常结束的还是非正常结束。

热点排行