2014-01-15 3 views
1

Я сделал хэш-карту объектов в моей службе, как частную переменную-член. Но, я слышал, что хэш-карты не подходят для параллельного программирования. Я не понимаю, что это значит, какие последствия/побочные эффекты могут оказать на мое обслуживание. Я столкнулся с одновременными хэшмапами. Должен ли я использовать их вместо этого. В чем разница между тем, как и когда следует использовать одно или другое? Если у кого-то есть знания в этой области, пожалуйста, помогите!Hashmap для параллельного программирования

+0

, если ваше приложение для Android не имеет многопоточности, а поток использует hashMap, вам не нужно беспокоиться. –

+0

Посмотрите: http://stackoverflow.com/questions/510632/whats-the-difference-between-concurrenthashmap-and-collections-synchronizedmap – Ali

+0

Но я не понимаю, что созданный объект hashmap не является статическим , Таким образом, каждый поток будет иметь свой собственный объект hashmap (если только разные потоки не работают на одном и том же объекте) и не будет мешать хэш-карте других потоков. В этом случае мне не нужно беспокоиться о том, чтобы сделать мой хэш-файл одновременно/потокобезопасным. Правильно. – superuser

ответ

1

Когда вы говорите о параллельном программировании в java, вы говорите только о многопоточных приложениях. Вам нужно беспокоиться о том, что ваши структуры данных должны быть потокобезопасными, только если более чем один поток может получить доступ к этой структуре данных. Это не имеет ничего общего с тем, что структура данных является статической или переменной экземпляра. Если в вашей службе вы создаете больше, чем на потоке, например, и все эти потоки получают доступ к хеш-карте, вам, вероятно, потребуется синхронизировать доступ к этой хэш-карте. В таких случаях, даже если вы используете потокобезопасную структуру данных, имейте в виду, что безопасность потока гарантируется только при одной операции. Это означает, например, что если у вас есть фрагмент кода, который выполняет несколько операций над структурой данных и вы хотите, чтобы эти операции были атомарными, вам нужно синхронизировать себя с потоками, чтобы сделать эту транзакцию атомной. Чтобы лучше понять этот аргумент, пожалуйста, взгляните на http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html

Смежные вопросы