簡體   English   中英

是否有可能在Java套接字中進行寫入而沒有同時進行讀取拋出?

[英]Is it possible that a write in a Java socket throw without a simultaneous read throwing?

假設我有兩個線程,一個用於讀取,另一個用於發送; 如果寫入失敗,其他線程中的讀取操作是否也會總是失敗?

我認為至少有一種情況不是這樣(如果發送線程被中斷,則為InterruptedIOException),但是還有其他情況嗎? 如果是這樣,其中某些情況與網絡問題有關嗎?

另一種方法是,如果您已關閉套接字以進行寫入。 您不會寫,但仍然可以閱讀。

當另一端關閉Socket時,您可能無法寫入(因為數據無處可去),但是可能存在未讀數據,您仍然應該能夠讀取它們。

如果讀取超時,則可能要關閉套接字並終止所有寫操作。 例如,如果另一端已鎖定。 如果您不這樣做,則寫線程可能會永遠阻止等待等待超時的套接字的寫(並且可能永遠是)

我想這真的取決於您的情況。 可能最常見的情況是關閉連接,這意味着讀取和寫入都將失敗。 但是,這不一定是正確的。 您可能有一些奇怪的防火牆設置,該設置使您可以讀取但不能寫入。

我對您的建議是分別對每個線程進行編程,而不是考慮每種可能的情況。 如果您嘗試閱讀卻無法閱讀,會發生什么? 如果您嘗試在另一個線程中編寫而不能編寫,會發生什么? 如果兩個線程都可以讀取和寫入非常重要,請設計某種回退機制,以在當前線程以某種方式出現問題時(當然,如果另一個線程仍然處於活動狀態)停止另一個線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM