2014-01-15 16 views
1

我做了一個我的服務中的對象散列表,作爲私有成員變量。 但是,我聽說hashmaps並不適合並行編程。 我不明白這是什麼意思,它可能對我的服務有什麼影響/副作用。我遇到併發hashmaps。我應該用這些來代替。 兩者之間以及何時應該使用其中一個或另一個之間有什麼區別? 如果有人有這方面的知識,請幫忙!並行編程的散列表

+0

除非你的android應用程序是多線程的,並且線程使用hashMap,那麼你不需要擔心。 –

+0

看看:http://stackoverflow.com/questions/510632/whats-the-difference-between-concurrenthashmap-and-collections-synchronizedmap – Ali

+0

但我不明白的是,我創建的散列表對象不是靜態的。所以,每個線程都會有它自己的hashmap對象(除非不同的線程在同一個對象上工作),並且不會干擾其他線程的hashmap。在這種情況下,我不需要擔心使hashmap併發/線程安全。對。 – superuser

回答

1

當你談論java中的並行編程時,你只會談論多線程應用程序。 只有當多於一個線程可以訪問該數據結構時,才需要擔心數據結構是線程安全的。這與數據結構是靜態的或實例變量無關。例如,如果在你的服務中你創建的不僅僅是線程,而且所有這些線程都可以訪問哈希映射,你可能需要將訪問同步到哈希映射。 在這些情況下,即使您使用線程安全的數據結構,請記住只有在單一操作時才能保證線程安全。 這意味着,例如,如果您有一段代碼在數據結構上執行多個操作,並且希望這些操作是原子操作,則必須將自己的線程同步以使此事務處於原子狀態。 爲了更好地理解這個參數,請看看 http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html