[JAVA] Thread's koordinieren

Hallo

Wie kann man in Java Thread’s in kritische/atomare Bereiche unterteilen um z.b. mit einer Datenbank arbeiten zu können ?

Das Problem ist einfach: 5 Threads sollen gleichzeitig auf eine Datenbank zugreifen und Operartionen ausführen ohne unterbrochen zu werden von anderen Threads die auch auf die gleichen Daten zugreiffen. Baut man keine Schutzmassnahmen ein bricht das system nach spaetestens 5 in zusammen.

Danke.

Das Problem ist einfach: 5 Threads sollen gleichzeitig auf
eine Datenbank zugreifen und Operartionen ausführen ohne
unterbrochen zu werden von anderen Threads die auch auf die
gleichen Daten zugreiffen. Baut man keine Schutzmassnahmen ein
bricht das system nach spaetestens 5 in zusammen.

Hmmm, ich weiß zwar nicht ob Java da was vorgefertigtes bietet, aber könntest du das nicht über die Datenbank mit Transaktionen/Locking lösen?

Also, wenn ein Thread anfängt zu arbeiten, dann startet er eine Transaktion. Wenn er z. B. in Tabelle xyz was ändert dann wird die gesperrt bis die Transaktion beendet ist. Wenn jetzt während der Transaktion an einen andren Thread weitergegeben wird und der auf diese Tabelle zugreift, dann wird die Anfrage zurückgestellt und erst ausgeführt wenn der andre Thread die Transaktion beendet hat.

Allerdings mußt du auf Deadlocks aufpassen, wenn Thread 1 zuerst auf Tabelle xyz zugreift, dann Thread 2 auf abc, Thread 1 dann auf abc zugreifen will und Thread 2 auf xyz dann warten beide bis sie schwarz werden (bzw. bis die Datenbank einen Timeout zurückgibt). Mußt halt schauen, dass das nicht vorkommen kann (wenn z. B. alle Threads in selber Sequenz auf die Tabellen zugreifen kann das nicht passieren).

Falls das irgendwie nicht deinen Vorstellungen entspricht kannst du das noch über eine kleine selbstgeschriebene Klasse lösen die als weiterer Thread rennt und auf die alle Threads einen Handle haben. Damit kannst du dann koordinieren wer wann darf, z. B. indem du jeden Thread zuerst dort deponieren läßt, dass er was will und dann wird der Thread verständigt, dass er darf.

Grüße, Robert

Dafuer gibts „synchronized“ Methoden…
mehr hier:
http://web2.java.sun.com/docs/books/tutorial/essenti…
unter „Synchronizing Threads“

Gruss,

Max

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danle an alle,
Problem gelöst.