3

在IM客戶端的情況下。我做了2個獨立的線程來處理髮送數據包(通過std io)和接收數據包。問題是如何讓這兩個線程同時運行,以便我可以隨時提示輸入,同時隨時準備接收數據包?同時運行2個線程

我已經嘗試設置一個計時器,但數據總是丟失接收。

+1

一般來說,一段代碼可以顯示你的行爲,對獲得高質量的答案有很大的幫助。 – 2010-05-02 06:26:44

回答

7

我想你可能會錯過一些顯著有兩種線程,流或兩者:-)

你可以開始一個新的線程這樣的:

 
myThread.start(); 

線程將被啓動和運行()方法將由jvm自動執行。

如果線程run-method正在讀取一個Stream,並且它是唯一一個讀取,它將不會「錯過」該流中的任何內容。

18

沒有更多的細節,很難給出完整的答案。然而,這裏是啓動兩個線程的代碼:

Thread thread1 = new Thread() { 
    public void run() { 
    // ... your code here 
    } 
}; 
Thread thread2 = new Thread() { 
    public void run() { 
    // ... your code here 
    } 
}; 
thread1.start(); 
thread2.start(); 
+0

我的發送和接收線程分別依靠發送和偵聽UDP套接字。從我所能理解的,你的示例代碼似乎立即在代碼中注入線程。我爲他們創建了一個可運行的類,那麼您的方法是否適用於此類? – lamsaitat 2009-04-20 16:22:42

7

那麼,他們將無法運行同時除非你有一個多處理器計算機,但是這通常不是問題。會發生什麼情況是每個線程都會得到一段時間,或多或少地取而代之。

如果你正在丟失I/O,這可能不是線程,這是你真正的問題。你能告訴我們你是如何閱讀這些東西的嗎?