/ / Vlákno jedinečné dáta - java, multithreading, vlákno-bezpečnosť

Unikátne dáta závitov - java, viacnásobné spracovanie, bezpečnosť vlákien

Musím si ponechať hashmap, ktorá by mala byťverejné pre všetky vlákna, ktoré vykonávajú. Napríklad hashmap aktualizovaný jedným konkrétnym vláknom by mal byť dostupný aj pre ostatné vlákna a naopak. Navrhnite mi prosím implementáciu v jazyku Java.

Hlavný program obsahuje hashmap. Z tohto hlavného vlákna budem viesť veľa vlákien. Každé vlákno by malo mať prístup k rovnakej hašovacej mape, ktorá je k dispozícii v hlavnom programe.

Vopred ďakujem.

odpovede:

1 pre odpoveď č. 1

pozrite sa tu pre všetky štruktúry dát bezpečných pre vlákna ... http://download.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html

Myslím, že potrebujete súbežnú hašovaciu mapu. Ak môžete svoju mapu zmeniť na zoznam, môžete použiť funkciu CopyOnWriteArrayList, ktorá umožňuje vysoko efektívny spôsob bezpečného čítania čítať zápis do zoznamu.


1 pre odpoveď č. 2

Problémom v Java nie je zdieľanie premennejmedzi viacerými vláknami: môžete to urobiť jednoducho odovzdaním odkazu na objekt do vlákna. Majte na pamäti, že musíte mať istotu, že k nemu získate bezpečný prístup ... Súčasná úprava môže byť problémom. Navrhujem, aby ste si prečítali príručku o súbežnosti Java, je to veľmi dobrý východiskový bod: http://download.oracle.com/javase/tutorial/essential/concurrency/index.html


0 pre odpoveď č. 3

Nerobte to ako statické - takto sú problémy so súbežnosťou a váš kód je menej testovateľný. Namiesto toho použite súbežnú hašovaciu mapu:

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

A odošlite odkaz na každé vlákno, ktoré to potrebuje.


0 pre odpoveď č. 4

Hashmap môže byť statický a môže byťprístupné v vláknach pomocou ClassName. Myslím, že je to jedno riešenie, ale súbežnosť môže byť problémom. Očakávam akékoľvek dobré riešenie týkajúce sa tohto problému.