2016-08-16 72 views
0

我有一個類HostServer其中包含我的其他種類的服務器(實際上是Minecraft服務器)的實例,並且此主機類可能創建超過100次(具體取決於用戶)。所以我想知道,對於大量實例(對於主機類)來說,處理併發性的好方法是什麼?我認爲我可以使用鎖(ReentrantReadWriteLock),但是如果有很多實例,它可能會很重。處理大量實例併發的輕量級方法

謝謝你的答案

EDIT(答案評論):

我真正需要的,因爲有一個更新線程和其他人只是讀取數據,以實現資源共享。

我的需求是擁有最新的數據,所以我需要處理這樣一個事實,即如果一個線程讀取,另一個寫入,寫入必須先寫入。雖然,我不希望代碼太重,因爲我可能有很多實例(對於主機類,從10到1000,對於Minecraft服務器類,從20到10000)。

的實際代碼:https://github.com/devcreart/GameStack/blob/develop/server/src/main/java/fr/creart/gamestack/server/server/HostServer.java

再次感謝

+3

處理併發的最好方法是不處理。如果你能避免共享資源,那就去做吧。 –

+0

這完全取決於你需要/想要完成的事情。沒有更多的信息,就不可能說像'ReentrantReadWriteLock'這樣的鎖是否適合你想要做的或者其他解決方案。 – Jesper

+0

顯示您的代碼到目前 –

回答

0

過早的優化是萬惡之根。

如果您不確切地知道自己有性能問題,只需執行簡單的解決方案即可。

如果您有一些要求或一些假設,然後嘗試創建負載測試並在其後做出結論。

但是,如果您現在有性能問題,請嘗試將共享狀態移出到某個非阻塞數據結構。

+0

當然,我只是想防止未來的問題,但你是對的!不過,什麼是非阻塞數據結構? – Creart

+0

數據結構在您使用它時不會被完全阻塞。最簡單的例子 - ConcurrentHashMap。 –