# Die ganze klasse als eigenen Thread laufen lassen



## Mican (2. Sep 2005)

Hallo,

Hab ein Java projekt gemacht wo die ganzen db zugriffe in einer klasse drin sind als singelton. Nun ist es ab und zu mal so das einige db anfragen viel daten laden müssen und wenn das lange dauert verschmierts die GUI da sie auf die rückgabe von der db wartet. Ist es möglich das ich ohne viel änderungen die klasse db.java als thread laufen lasse und alle funktionen die aufgerufen werden in diesem thread laufen?

danke im voraus für die antworten


----------



## Grizzly (3. Sep 2005)

Da Threads eine Sache für sich sind, würde ich mal sagen: jein. Es geht auf jeden Fall, aber einfach ist es nicht.

Ich hab' im Geschäft genau das gleiche Problem. Hab' das jetzt so gelöst, das standardmäßig nur bspw. Einträge der letzten 2 Wochen angezeigt werden. Wer sich alle Einträge anzeigen lassen will (sind mindestens 3 bis 4 Jahre), ist selber Schuld. Vor allem geht das bei mir deswegen schon nicht, weil ich es in einem JTable anzeigen lass. Und dieses braucht sowieso Zugriff auf alle Daten. Dann würde es spätestens da auf die Daten warten. Bringt also in dem Fall gar nichts.

Wenn Du die Daten natürlich im Hintergrund verarbeiten willst und am Schluss nur ein Ergebnis anzeigen willst, ist ein weiterer Thread für den Datenbank Zugriff natürlich ein gute Idee. Wobei Du am Besten soviel wie möglich schon in der SQL Anfrage erledigen lassen solltest. Meist ist der Server (auf dem die Datenbank läuft) sowieso schneller als der Arbeitsplatzrechner. Und der Datendurchsatz sowie die Zugriffsgeschwindigkeit des Servers ist auch höher als vom Arbeitsplatzrechner über das Netzwerk über den Server auf die Daten.


----------



## Guest (5. Sep 2005)

Ein Lösungsansatz ist die Verwendung von SwingWorker.


----------



## Mag1c (5. Sep 2005)

Moin,

also mal angenommen, du stößt die DB-Anfragen über die GUI an (z.B. Button). Jetzt könntest du genau an dieser Stelle einen Thread einhaken. Also Button gedrückt -> neuen Thread erzeugen und starten -> neuer Thread führt DB-Abfrage aus und stellt Ergebnis dar. Das könnte durchaus so einfach sein, wie es hier klingt. Ein bisschen Arbeit ist auf jedenfall noch angesagt, um die GUI Thread-sicher zu machen, da diese ja voll bedient werden kann, während der DB-Thread aktiv ist.

Gruß
Mag1c


----------

