Поток уникальных данных - PullRequest
0 голосов
/ 07 июня 2011

Мне нужно поддерживать хэш-карту, которая должна быть общедоступной для всех выполняющихся потоков.Например, хэш-карта, обновляемая одним конкретным потоком, должна быть доступна и другим потокам, и наоборот.Пожалуйста, предложите мне реализацию на Java.

Основная программа содержит hashmap.Из этого основного потока я буду инициировать множество потоков.Каждый поток должен получить доступ к одной и той же хэш-карте, доступной в основной программе.

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 11 июня 2011

ищите все поточно-ориентированные структуры данных ... http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html

Полагаю, вам нужна одновременная хэш-карта. Если вы можете изменить свою карту на список, вы можете использовать CopyOnWriteArrayList, который позволяет очень эффективный и безопасный способ чтения записи в список.

1 голос
/ 07 июня 2011

Проблема в Java не заключается в разделении переменной между несколькими потоками: вы можете легко сделать это, просто передав ссылку на объект в поток. Пожалуйста, имейте в виду, что вам нужно быть уверенным, чтобы получить к нему безопасный доступ ... Одновременная модификация может быть проблемой. Я предлагаю вам ознакомиться с руководством по параллелизму Java, это очень хорошая отправная точка: http://download.oracle.com/javase/tutorial/essential/concurrency/index.html

0 голосов
/ 09 июня 2011

Не делайте его статичным - таким образом возникают проблемы с параллелизмом, и он делает ваш код менее тестируемым.Вместо этого используйте одновременную хэш-карту:

http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html

и передайте ссылку на нее каждому потоку, который в ней нуждается.

0 голосов
/ 09 июня 2011

Хэш-карта может быть статической и доступна в потоках с помощью ClassName.Я думаю, что это одно из решений, но параллелизм может быть проблемой.Ожидается любое другое хорошее решение по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...