Alternative für Threads

Wippi11223

Mitglied
Hallo,

Ich habe folgende Anforderung an mein System und bin auf der Suche nach einer alternativen Lösung als Threads oder eine Verbesserung mit Threads:

Meine Applikation führt kontinuierlich Berechnungen durch Berechnung A --> ab einen gewissen Zeitpunkt initiiere ich einen Thread und führe eine parallele Berechnung durch Berechnung B1, B2, B3 --> wenn der Thread beendet ist aktualisiert dieser eine Hashmap in der Hauptapplikation. Dies ist natürlich gefährlich denn es passiert manchmal dass ich gerade in selben Moment in der Hauptapplikation durch die Hasmap iteriere während mir gerade ein Thread die Hashmap aktualisiert und das führt dann zu Problemen.

Alternative Architektur
Habt ihr einen Vorschlag für ein besseres Design, Architektur bzw. Lib wie ich das lösen kann?
Ich benötige etwas wo ich eine Berechnung "hinschicken" kann --> wenn sie fertig ist soll sie sich wieder melden damit ich diese verarbeiten kann --> während dessen soll die Applikation aber weiter rechnen.

Verbesserte Architektur mit Threads
Derzeit starte ich den Thread aus der Hauptapplikation --> wenn sie fertig ist dann ruft der Thread eine statische Methode in der Hauptapplikation auf um die Hashmap zu aktualisieren --> ich finde diese Lösung nicht besonders toll -> gibt es eine Alternative dafür ohne dass ich hier eine statische Methode aufrufen muss?

Ich hoffe ihr könnt mir hier weiterhelfen.


Vielen Dank
 

White_Fox

Top Contributor
Guckste hier:

 

LimDul

Top Contributor
Sobald du mehr als einen Thread hast, musst du dich drum kümmern, dass die sauber auf gemeinsamen Daten arbeiten. Das heißt, du musst sicherstellen, dass es bei Verändern von gemeinsamen Daten keine Probleme gibt.

Bzgl. der Collections API gibt es nicht Thread Safe Klasse. Das heißt, wenn du die verwendest, musst du sicherstellen (siehe Beitrag von @White_Fox) das nie zwei Threads gleichzeitig auf der Struktur hantieren.

Nutzt du die Thread-sicheren klassen, dürfen grundsätzlich auch zwei Threads gleichzeitig drauf hantieren. Aber nur aus technischer Sicht. Fachlich muss man das immer noch prüfen und alles geht gleichzeitig nicht. So wirst du mit Sicherheit auch bein Thread-sicheren Klassen nicht in dem einen Thread drüber iterieren können und in dem anderen die Collection ändern. Weil das steht bei HashTable in der Javadoc:

If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation), the results of the iteration are undefined.
Sprich, das musst du trotzdem sicherstellen, dass das nicht passiert.

Multi-Threading kann leider schnell sehr häßlich werden.
 

Wippi11223

Mitglied
@Multithreads
Ja ich denke auch das Mutli Threading nicht das beste ist - gibt es nicht LIBs die solche Anforderungen abdecken - eigentlich brauche ich ein Queuing System in den ich nach Berechnung notifiziert werde und dass es manuell verarbeitet - lässt sich soetwas nicht mit Observables lösen?

@Architektur
Das heisst ich muss dies wie folgt lösen:
Hauptapplikation A berechnet ( diese Klasse inkludiert die Hashmap und eine statische Methode in der ich die Hashmap aktualisiere)
--> Thread A startet
--> Thread B startet
--> Thread A ist fertig und nun möchte ich die statische Methode aufrufen um die Hashmap zu aktualisieren --> das bedeutet diesen Aufruf muss ich unter Lock stellen oder? Gibt es eine Möglichkeit die statische Methode wegzubekommen?

==> das löst zwar das Problem dass nicht 2 Threads gleichzeitig auf die Hashmap zugreifen - aber es löst nicht das Problem dass während dessen die Hauptapplikation über die Hashmap iteriert richtig? Gibt es eigentlich eine Lösung dafür? Denn das kann ich ja nicht sicherstellen dass dies nicht gleichzeitig passiert....
 

White_Fox

Top Contributor
Die Frage ist (aus meiner Sicht), warum müssen es mehrere Threads sein. Dauert die Berechnung sonst zu lange?

==> das löst zwar das Problem dass nicht 2 Threads gleichzeitig auf die Hashmap zugreifen - aber es löst nicht das Problem dass während dessen die Hauptapplikation über die Hashmap iteriert richtig? Gibt es eigentlich eine Lösung dafür? Denn das kann ich ja nicht sicherstellen dass dies nicht gleichzeitig passiert....
Das kommt darauf an wie du das implementierst, du hast ja insgesamt drei Threads: Thread A, Thread B und deine Hauptapplikation läuft in einem eigenen Thread. Aus Sicht eines threadsicheren Objekts ist es völlig egal, welcher Thread da zugreift, es stellt sich gefälligst jeder hinten an.
Wenn aber deine Hauptapplikation am Threadlock vorbei auf die HashMap zugreifen kann ist das natürlich Mist. Wenn aber auch deine Hauptapplikation über die gleichen Methoden auf der HashMap rumwerkelt sollte das kein Problem sein.

Ich würde die Datenstruktur, sofern du die HashMap verwenden willst/mußt, in einer separaten Klasse kapseln, sodaß nur über von mir definierte Methoden geschrieben und gelesen werden kann. Und innerhalb der Zugriffsmethoden würde ich die Zugriffsberechtigung regeln.
 

mrBrown

Super-Moderator
Mitarbeiter
das bedeutet diesen Aufruf muss ich unter Lock stellen oder?
Nicht diesen, sondern alle Nutzungen der Map ;)

Gibt es eine Möglichkeit die statische Methode wegzubekommen?
Das static weglassen :p

Einfach eine Referenz auf die entsprechende Klasse halten und diese nutzen.

==> das löst zwar das Problem dass nicht 2 Threads gleichzeitig auf die Hashmap zugreifen - aber es löst nicht das Problem dass während dessen die Hauptapplikation über die Hashmap iteriert richtig? Gibt es eigentlich eine Lösung dafür? Denn das kann ich ja nicht sicherstellen dass dies nicht gleichzeitig passiert....
Du musst einfach jede Nutzung absichern - wenn ein Thread die Map lesend benutzt, darf kein anderer Schreiben.


uU gibt es aber bessere Möglichkeiten, als eine HashMap dafür zu nutzen, vor allem wenn man regelmäßig über diese Iterieren muss. Queue hast du ja selbst schon genannt, ob und wie die nutzbar ist hängt natürlich vom genauen Anwendungsfall ab.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
M DAOs veraltet - was ist die Alternative? Allgemeine Java-Themen 13
MiMa Array umbau oder Alternative? Allgemeine Java-Themen 5
C Alternative zu NetworkX in Java Allgemeine Java-Themen 1
M Alternative zur Serialisierung.. Protobuf? Allgemeine Java-Themen 9
B Alternative zu nebenläufigen Prozessen Allgemeine Java-Themen 4
BonoBoo Alternative zum endlosen Instanzieren Allgemeine Java-Themen 2
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
E Gewollte Endlosschleife unterbrechen oder Alternative gesucht Allgemeine Java-Themen 2
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
F alternative zu "JPEGImageDecoderImpl" Allgemeine Java-Themen 2
T Timer oder Alternative? Allgemeine Java-Themen 3
G Alternative zu .properties Dateien Allgemeine Java-Themen 20
S Alternative zu SortedMap? Allgemeine Java-Themen 8
H Alternative zu Stack Allgemeine Java-Themen 3
pikay Jar2Exe Alternative? Allgemeine Java-Themen 17
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
H Alternative if Schreibweise mit ? Allgemeine Java-Themen 10
G suche Property alternative Allgemeine Java-Themen 4
H Wie schön oder unschön ist dieser code - alternative ? Allgemeine Java-Themen 5
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
G libext Alternative? Allgemeine Java-Themen 5
S Alternative zu Robot (wegen Umlauten) Allgemeine Java-Themen 13
foobar Alternative zu JavaHelp gesucht Allgemeine Java-Themen 2
I Alternative zu getClass().getResourceAsStream() ? Allgemeine Java-Themen 9
D System.setProperty alternative Allgemeine Java-Themen 4
J alternative zu rsh ? Allgemeine Java-Themen 5
K KeyListener-Alternative ohne anfängliches Delay ? Allgemeine Java-Themen 5
G Alternative zu split() Allgemeine Java-Themen 3
K Alternative zu JNI Allgemeine Java-Themen 3
P Alternative zu replaceAll (jdk < 1.4) Allgemeine Java-Themen 14
M Alternative zu Thread : stop() ? Allgemeine Java-Themen 10
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
kodela Eingabe für TextArray bedingt sperren Allgemeine Java-Themen 3
Karl_Der_Nette_Anfänger Hat wer ne Lösung für verknüpfte Postleitzahlen? (Baum/Wurzel Struktur) Allgemeine Java-Themen 11
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
G KeyListener für JTextField Allgemeine Java-Themen 5
webracer999 Library für Textsuche (z. B. include/exclude, and/or)? Allgemeine Java-Themen 5
I Module-Info für Jar erzeugen Allgemeine Java-Themen 7
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
B Simpler Eventlistener für Tastaturtaste bauen? Allgemeine Java-Themen 13
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
E Key für TOTP Algorythmus(Google Authentificator) Allgemeine Java-Themen 0
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
jhCDtGVjcZGcfzug Klassen Was genau passiert hier? Kann mir das jemand bitte Zeile für Zeile erklären? Allgemeine Java-Themen 1
rosima26 Bester Sortieralgorithmus für kurze Arrays Allgemeine Java-Themen 40
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
B Lottospiel, genug Reihen tippen für 3 Richtige (Spaß mit Arrays)? Allgemeine Java-Themen 46
B Mit welchen Datentypen und Strukturierung am Besten dutzende Baccaratspiele Shcritt für Schritt durchsimulieren? Allgemeine Java-Themen 26
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
I OCR Library für Belegerkennung Allgemeine Java-Themen 7
farah GetterMathod für Farbkanäle Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
S Webservices für binäre Daten? Allgemeine Java-Themen 5
G Licence-Header für InHouse entwickelten Source Allgemeine Java-Themen 8
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
F Java Script für das Vorhaben das richtige? Allgemeine Java-Themen 9
M wiviel Java muss ich für die Berufswelt können ? Allgemeine Java-Themen 5
Robertop Datumsformat für GB ab Java 16 Allgemeine Java-Themen 1
Thallius Verschiedene entities für gleichen Code…. Allgemeine Java-Themen 8
OnDemand Zentrale "Drehscheibe" für verschiedene APIs Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
D SHA-3 für Java-version 1.8 Allgemeine Java-Themen 1
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
Muatasem Hammud Erstellung von Testdaten für Arrays Allgemeine Java-Themen 6
B Logikfehlersuche, das perfekte Lottosystem für 3 Richtige mit Arraylists? Allgemeine Java-Themen 61
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
M API für PLZ Umkreissuche Allgemeine Java-Themen 3
1Spinne JDK 8 für Eclipse installieren Allgemeine Java-Themen 5
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
L Methoden Parser für gängige Datumsformate? Allgemeine Java-Themen 1
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
buchfrau Anagram für beliebiges Wort Allgemeine Java-Themen 2
TonioTec Api für Datenaustausch zwischen Client und Server Allgemeine Java-Themen 0
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
Kirby.exe Distanz Map für die Distanztransformation erstellen Allgemeine Java-Themen 1
F PI Regler für Heizung Allgemeine Java-Themen 7
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
M Wie übergebe ich den Zähler für die Anzahl Rekursionsschritte korrekt? Allgemeine Java-Themen 2
B Login für User, der im Hintergrund Schedules ausführt Allgemeine Java-Themen 16
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
S Java-Task-Management-Tool für Windows und Mac selber programmieren Allgemeine Java-Themen 4
M Java 2D Array für ein Grid erstellen ? Allgemeine Java-Themen 2
Z Welches GUI Framework für Java ist aktuell? Allgemeine Java-Themen 16
N Convert.FromBase64 von C# für Java Allgemeine Java-Themen 11
N fixed-keyword von C# für Java Allgemeine Java-Themen 6
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben