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ď č. 1pozrite 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.