Hallo, ich bin noch etwas unerfahren was den Umgang mit Threads angeht, deshalb hoffe ich darauf, dass mir jemand bei der Lösung folgendes Problems behilflich sein kann:
Es geht um Bukkit, eine Servermod für Minecraft Server, die das Einspielen eigener Plugins erlaubt. Dafür stellt Bukkit eine API zur Verfügung, um beispielsweise auf Spieler oder Eventlistener zuzugreifen.*
Nun habe ich Daten, die ich für einen Spieler, sobald dieser sich verbindet, aus einer Datenbank nachladen muss. Das darf nicht im Mainthread passieren, da der Server sonst lagt. Da nahezu keine Methode der API synchronisiert ist, kann ich (glaube ich) nicht einfach einen asynchronen Thread benutzen. Die Bukkit API bietet Zugriff auf einen Scheduler, mit dem man sowohl synchrone als auch asynchrone Threads laufen lassen kann (auch jeweils als Timer).*
Wenn ich die MySQL Abfrage jedoch in einen synchronisierten Thread packe, dann lagt der Server auch.*
Hier also was ich mir ohne Fachkenntnis gedacht habe:
Der asynchrone Datenbanm-Thread hat Zugriff auf eine Liste, in welche der main-Thread alle neuen Spieler einträgt. Alle 1-2 Sekunden tickt dieser Thread (oder wie verhalten sich Threads, die mehrfach hintereinander gestartet werden?) und speichert die Ergebnisse seperat in zwei anderen Listen, die mit einem dritten synchronisierten Thread ausgewertet werden.*
Geht das? Ist das sinnvoll?*
Bitte um Rat.*
Es geht um Bukkit, eine Servermod für Minecraft Server, die das Einspielen eigener Plugins erlaubt. Dafür stellt Bukkit eine API zur Verfügung, um beispielsweise auf Spieler oder Eventlistener zuzugreifen.*
Nun habe ich Daten, die ich für einen Spieler, sobald dieser sich verbindet, aus einer Datenbank nachladen muss. Das darf nicht im Mainthread passieren, da der Server sonst lagt. Da nahezu keine Methode der API synchronisiert ist, kann ich (glaube ich) nicht einfach einen asynchronen Thread benutzen. Die Bukkit API bietet Zugriff auf einen Scheduler, mit dem man sowohl synchrone als auch asynchrone Threads laufen lassen kann (auch jeweils als Timer).*
Wenn ich die MySQL Abfrage jedoch in einen synchronisierten Thread packe, dann lagt der Server auch.*
Hier also was ich mir ohne Fachkenntnis gedacht habe:
Der asynchrone Datenbanm-Thread hat Zugriff auf eine Liste, in welche der main-Thread alle neuen Spieler einträgt. Alle 1-2 Sekunden tickt dieser Thread (oder wie verhalten sich Threads, die mehrfach hintereinander gestartet werden?) und speichert die Ergebnisse seperat in zwei anderen Listen, die mit einem dritten synchronisierten Thread ausgewertet werden.*
Geht das? Ist das sinnvoll?*
Bitte um Rat.*