2010-05-14 108 views
1

即時通訊新的Java和我有一個關於Synchronized的問題。Java同步寫塊

我有下面的代碼寫入到網絡(簡單實現現在):

public void networkSendData(byte[] data){ 

    try { 

     out.write(data); 
     out.flush(); 

    } catch (IOException e) { 


    } 
} 

我想知道是否有此同步,即時我一次寫入整個數據需要塊級。還是有機會出現競賽狀況?我問,因爲要寫的數據來自多個來源。

謝謝。

回答

1

以您爲例,除非多個線程將訪問相同的out變量,否則不需要有一個synchronize d塊。

換句話說,如果你有多個線程同時調用networkSendData,你應該是synchronize的方法。您不希望有一個線程調用flush,而另一個線程執行write方法的一半。

public synchronized void networkSendData(byte[] data) 

您還需要確保沒有任何線程訪問/修改out變量的值,同時有一個機會,另一個線程可以在networkSendData方法。

這取決於接收寫入數據的服務器如何處理它。如果使用多個線程根據寫入服務器的內容更新共享可變變量,則需要實現線程安全性。

+0

在服務器端,只有一個線程監聽傳入數據。 – iTEgg 2010-05-14 12:55:07

+0

我已經更新了我的答案。 – Finbarr 2010-05-14 12:58:49

+0

謝謝,這是我想知道的。多個節點同時傳輸(很少但可能發生)。 – iTEgg 2010-05-14 12:59:13