2012-09-11 14 views
0

我正在編寫一個程序,其中一個程序創建一個從套接字讀取的線程,我的問題是當創建兩個線程時,都從數據輸入流中讀取。一個線程正確讀取,另一個線程遇到一個EOS,並在讀取字節時返回-1。我已同步我的運行方法當兩個線程從數據輸入流中讀取時EOS到達

+1

您應該只使用一個線程從流中讀取,否則這可能會導致混淆。您不需要同步讀取,因爲它已經是線程安全的。如果你得到'-1'則表示流結束。 –

+0

讀取方法阻塞,直到某些流被正確接收,在這種情況下,它達到EOS並返回-1,這反過來停止整個過程 – Joy

+0

這個問題只發生在有時,有時它正常工作..這不是一個問題一直髮生。 – Joy

回答

0

必須是因爲第一個線程讀取流直到EOF。這是預期的行爲。如果你想分開閱讀,例如在100字節之後交換讀取器,使用read(byte[] b, int off, int len),否則從一個線程讀取數據然後共享它。

+0

我用0和4作爲我的偏移量和長度,線程同時啓動,並使用相同的程序來讀取..也從同一個套接字讀取,一個線程接收數據後另一個和另一個線程迴應它使用相同的程序 – Joy

+0

@Joy你可以發佈源?也許線程永遠不會產生,但沒有代碼很難說。 – zeller

0

你在做什麼沒有意義。不能連續或同時讀取兩次流。在這種情況下,如果線程A讀取第一個字節,則線程B不能讀取第一個字節。如果線程A讀取所有字節,則線程B不能讀取它們中的任何一個。

+0

這個問題有時只會發生,有時它的工作正確..這不是一直髮生的問題。所以我想我可以做到 – Joy

+0

@Joy最好你的線程將交替地從流中讀取隨機數的字節。他們是否能夠理解這一點完全取決於你如何編程。您需要以足夠高的水平以某種方式對它們進行相互同步,以便您可以確保每個線程在允許其他線程讀取之前已經讀取了它想要讀取的內容。你得到隨機行爲的事實表明你沒有這樣做,並且你確實只是猜測它會在沒有這個的情況下工作。它不會。 – EJP

相關問題