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