socket通訊過程當中,客戶端讀消息線程加鎖

public void setMsg(TransportObject msg)
{
    this.msg=msg;
    synchronized (this)
       {
         notify();
       }
}


public void run()
{        
     try {
         synchronized (this)
         {
             wait();
         }
      } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
      }  
      while(isStart)
      {
          //注意,此語句也必須寫在while循環中,由於該線程的開啓是在client類中開啓的,可是setMsg方法
          //是在須要時才調用的,即必須讓該線程一直運行,一直嘗試寫,加一個判空的語句來操做具體是否寫
         if(msg!=null)
         {
             try {
                   oos.writeObject(msg);
                   oos.flush();
                   msg=null;//此語句必定不能去掉,不然oos.writeObject(msg)語句會一直執行
                 } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                 }
             }
          }
          try {
               //Log.i("ClientOutputThread","this print is after while loop");
               oos.close();
              } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
              }
 } 
相關文章
相關標籤/搜索