2009-07-06 29 views
0

有人告訴我,任何數據流出輸出流(我使用tcp/ip在我的情況)可能會阻止。在這種情況下,我不想通過等待數據消失來停止應用程序。java如何做一個發件人線程

我需要一個如何做到這一點的模型。

我需要通過此流發送消息對象。

我在想我需要一個包含這些消息對象的阻塞隊列。線程的run()方法將獲取任何可用的消息對象併發送它們,而true。

我的問題是

  1. 是否有更好的方法來做到這一點不是一個真正的同時循環?也許在沒有消息發送的同時真正的循環中,我可以告訴線程產生/睡眠。

  2. 有沒有更好的使用模式?我擔心如果我在代碼中有一段時間(真的),它會消耗等待消息的處理器週期。

請有誰有這方面的經驗,讓我知道是否有更好的辦法。

感謝, JBU

+0

嗯聽起來好像兩個問題都是一樣的...... – jbu 2009-07-06 23:42:26

回答

0

這是一個很好的機制,只要您的隊列是阻塞之一。在等待另一條消息到達隊列時,您將自動產生處理器。

如果你以非阻塞的方式讀取隊列,那麼你將浪費大量的CPU時間。您通常必須盡力去做到這一點,但這一切都取決於您使用的隊列類型。

0

Java已經實現了兩種方法:通過阻塞方法(您已經解決)或非阻塞方法。

對於最簡單的方法通過阻斷方法去異步通信,你可以看看這個答案: question 1041014

如果你想使用非阻塞的方法,你必須要看看NIO框架。在開始實現時並不是特別容易,因爲它使用了一些複雜的概念,但是一旦你瞭解瞭如何處理通信事件,製作強大的實現就相當簡單。最後,你最終會使用阻塞方法,因爲CPU時間不需要浪費,但是NIO框架可以讓你創建一個單線程通信實現,這對於cpu和內存使用來說是非常理想的。

看看O'reilly NIO的書。

相關問題