Minecraft Minecraft, MySQL und Threads

Minecraft - Java Edition

Mark.W

Mitglied
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.*
 

HimBromBeere

Top Contributor
Alle 1-2 Sekunden tickt dieser Thread (oder wie verhalten sich Threads, die mehrfach hintereinander gestartet werden?)
Das sollte eigtl. gar nicht gehen. Ein Thread kann nur ein mal gestartet werden, ansonsten bekommst du eine IllegalThreadStateException um die Ohren geschmissen.
 
S

SlaterB

Gast
so ein Satz kann doch alles mögliche bedeuten, etwa dass ein Thread in diesen Intervallen von seinem sleep erwacht und die wichtige Aktion einer Schleife ausführt,
bzw. eben ein Timer, warum nimmst du genau das unwahrscheinliche der Thread-Neuerzeugung/ -Neustart an?

@Baba43
wenn du irgendwas schon hast, was tatsächlich irgendwie geht, kann man dich praktisch nur darin bekräftigen,
für alles andere wären wohl seitenlange intensive Erklärungen/ Codes nötig
 

Mark.W

Mitglied
Das sollte eigtl. gar nicht gehen. Ein Thread kann nur ein mal gestartet werden, ansonsten bekommst du eine IllegalThreadStateException um die Ohren geschmissen.

Der Bukkti-Scheduler kann "repeating Tasks" oder "delayed Tasks" starten, also geht das relativ simpel.

@SlaterB
Ob die Lösung funktioniert weiß ich nicht, allerdings programmiere ich zwar schon gezielt für ein Projekt, allerdings immer mit der Einstellung, möglichst viel dazu zu lernen. Zudem soll die Lösung meines Problems performancetechnisch gesehen die beste sein und deshalb wende ich mich hier an die "Profis".

für alles andere wären wohl seitenlange intensive Erklärungen/ Codes nötig
Damit habe ich überhaupt kein Problem. Wenn du mir hilfreiche Links schicken kannst, bin ich willig mich damit zu beschäftigten. Ich habe ja bereits eine Menge über unterschiedliche Möglichkeiten gelesen, aber ich bin eben nicht wirklich schlauer, was nun die optimale Lösung ist.

Sollten Informationen fehlen (von wegen das kommt drauf an ob ob ob), dann reiche ich diese natürlich gerne nach :)
 
S

SlaterB

Gast
ähh ja, ich meinte dass du mehr schreiben musst, seitenlang und dein Code posten sollst usw. ;)
ganz so ernst vielleicht nicht zu nehmen, aber es eigentlich noch nichts von deinem Posting zu verstehen,

was wo wer wann warum macht, kann man an 1-2 Sätzen nicht herauslesen,
erst geht es um 'Daten, die ich für einen Spieler, [...] nachladen' werden, gut vielleicht der Spielername, das passiert einmal und gut,
warum sollte davon etwas laggen, wie oft passiert das, warum, welche Daten/mengen,

ein Thread ist glaube ich immer asynchron, gut, vielleicht wartet jemand darauf,
ob du einen laufen lassen kannst/ darfst/ sollst, wie soll das wer beurteilen?

Daten irgendwo ablegen, die andere abholen zum Ende deines Postings klingt grundsätzlich nach einer relativ schlauen Sache
wenn alles funktioniert, aber da gibts nicht viel zu sagen,

ein Auto ist auch mit einem Getriebe zwischen Motor und Reifen gut bedient, ja
 

Mark.W

Mitglied
Alles geht um die Chat-Channel, in denen der Spieler aktiv ist. Es wird aber später noch um ganz andere Dinge gehen, die ich den Spielern in MEINEN Plugins zuordne.

Ich habe gelernt, dass man für MySQL usw., alleine schon für den Fall, dass die Verbindung zur Datenbank länger ist, einen eigenen Thread hat. Am liebsten wäre es mir also, ich könnte die Daten den Spielern 3-4 Sekunden nach dem Verbinden zur Verfügung stellen, wenn ich das mit dem "Ticken" mache, damit die Threads nicht zu oft laufen.

Entscheident ist, dass ich die Bukkit API von asynchron gestarteten Threads nicht verwenden kann, nur von synchron gestarteten, die aber im Falle der MySQL-Verbindung den Serverthread belasten. So wartet der Server beispielsweise bei Unerreichbarkeit der Datenbank und macht in der Zeit nichts anderes oder der Lag dauert sogar solange, dass alle Spieler die Verbindung verlieren.

Nun verständlicher? :)
 
S

SlaterB

Gast
weitgehend dasselbe wie zuvor,
im Grundtenor lese ich immer noch dass bei dir alles funktioniert (oder du es noch nicht getestet hast)
 
U

Uhm...?

Gast
Bei sowas muss ich immer an das Zitat denken : warum landen Fragen Minecraft betreffend immer hier anstatt in Minecraft-Foren wo die Chance das sich damit jemand auskennt höher ist ?
Darauf kam die Gegenantwort : weil viele denken : "Minecraft ist in Java geschrieben -> Java-Forum".

@TO
Ganz erlich : du scheinst nur über sehr wenige Java-Grundlagen zu verfügen (falls überhaupt) und möchtest dich mit etwas so komplexen wie Bukkit befassen ?
Dann gibt es zwei Möglichkeiten :
1) lerne Java anständig was ein paar Jahre dauern wird
2) stelle deine Fragen in speziellen Minecraft/Bukkit-Foren wo es Leute gibt die sich genau damit sehr gut auskennen.

Deine Einleitung war auch eher witzig als Informativ , denn wenn du Google und die SuFu richtig benutzen würdest wüsstest du das hier schon mehrfach Fragen rund um Minecraft und Bukkit gestellt wurden. Von daher wissen wir was Bukkit ist, eine Erklärung dessen ist eher überflüssig.
 

Mark.W

Mitglied
Eine in meinen Augen wirklich dreiste Antwort.. ich habe in einem Nebensatz erwähnt was Bukkit ist und was damit möglich ist, weil mit Sicherheit nicht alle sich hier mit Bukkit oder Minecraft auskennen. In Zukunft also lieber nicht erklären, für was ich programmiere?

Ich habe sehr viel Java Erfahrung, nur fehlt es mir am Wissen im Umgang mit Threads (hättest du meinem Ausgangspost entnehmen können). Wieso unterstellst du mir sowas, anstatt eine vernünftige Antwort auf meine Frage zu geben?

Warum man in ein Java Forum geht um Fragen über Java beantwortet zu bekommen?
1. Hier sind mehr Leute die Java können als im Bukkit Forum
2. Mein Problem ist nicht nur auf Bukkit bezogen sondern ist allgemein vorhanden, ich wollte lediglich MEINE Rahmenbedingungen erläutern.

Gut dass man so einen hirnlosen Post nicht ernst nehmen kann..
 
U

Uhm...?

Gast
Wenn du so viel Plan von Java hast solltest du Threads drauf haben. Denn Threads gehören zu den elementaren Grundlagen in Java (alles was mit I/O und GUI zu tun hat hat auch was mit Threads zu tun). Von daher prale lieber nicht mit ach so riesigen Java-Erfahrungen wenn du dich einen Satz später mit dem Comment : "... nur halt keinen Plan von Threads ..." selbst wieder lächerlich machst.

Außerdem gibt es sehr wohl unterschiede zwischen dem einfachen "brauche Hilfe bei Threads" und "brauche Hilfe bei komplexen Timern in einem komplexen API".

Und wie gesagt : diejenigen die hier was drauf haben und dir dabei helfen könnten wissen sehr wohl was Minecraft und Bukkit sind, denn sie beantworten auch ständig ähnliche Fragen von anderen Usern. Und für die die eine Erklärung brauchen worum es überhaupt geht haben sicher nicht die Kompetenzen dir direkt helfen zu können.

Mal davon abgesehen ist das ganze Thema "Minecraft" ein ziemlicher Hipe und jeder der sich damit auch nur mal ansatzweise beschäftigt hat weis das es in Java geschrieben ist. Von daher kann man ruhig von ausgehen das es in einem Java-Forum ein durchaus geläufiges Thema sein sollte, vor allem wenn man mal dran denkt das man vielleicht nicht der erste Poster ist der sich damit beschäftigt und daher eben diese Erklärung schon gegeben wurde.
 
F

Firephoenix

Gast
Mal back to Topic wie man das ganze z.B. angehen kann (und es gibt immer eine bessere Lösung solange man nicht mathematisch bewiesen hat das es keine bessere geben kann ;) )

Da du immer noch nicht gesagt hast was das genau für Daten sind gehe ich mal davon aus, dass es irgendwelche wichtigen Daten sind die du für den Ablauf brauchst.
Gehen wir weiter mal davon aus, dass du nicht willst dass der Spieler in der Zeit wo die Daten geladen werden unfug auf dem Server machen kann.
Und das liegt daran, dass das Laden wirklich Zeitaufwändig im Bereich von mehreren Sekunden liegt.

Was du jetzt machen kannst:
du schreibst dir erstmal ein Modul das alle "gefährlichen" Events fängt und eine Liste aus Spielern verwaltet - alle Events die ankommen werden für die Spieler verboten (Eventpriorität entsprechend hoch setzen). Kommt ein Spieler auf den Server packst du den Spieler erstmal in die Liste.
Dazu erzeugst du dir dein Ladeobjekt, das z.b. von Thread erbt oder runnable implementiert oder irgendwelche Bukkit-Thread-Magie benutzt :).
Diesem übergibts du ebenfalls den Spieler und eine Referenz auf dein Sperrmodul.
In dem Thread führst du nun sämtliche Ladeoperationen aus und gibst die Ergebnisse in deinem Plugin weiter wo sie gebraucht werden.
Bist du fertig mit dem Laden wäre die letzte Operation den Spieler aus dem Sperrmodul auszutragen :)

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Minecraft Ich bekomme diesen unbekannten Fehlercode von Minecraft Spiele- und Multimedia-Programmierung 2
S Minecraft Server Status Abfragen Spiele- und Multimedia-Programmierung 9
Lord_Joker Minecraft Server Bat error Spiele- und Multimedia-Programmierung 2
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
W Minecraft Client exportieren Spiele- und Multimedia-Programmierung 0
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
Plug-inMacher Minecraft Plugin mit Itemstack kreierte Items weiterverwenden Spiele- und Multimedia-Programmierung 2
KIWILETSPLAY How can i delete a Minecraft world Spiele- und Multimedia-Programmierung 0
Taknax Minecraft: Export der Mod dupliziert Dateien Spiele- und Multimedia-Programmierung 0
Mika_MDF Minecraft Eclipse startet Minecraft nicht? Spiele- und Multimedia-Programmierung 23
C Minecraft Spigot Entities 1.8 Spiele- und Multimedia-Programmierung 2
C Eigene Minecraft Enchantements Spiele- und Multimedia-Programmierung 1
C Minecraft Enchantements Spiele- und Multimedia-Programmierung 1
Z Minecraft Hilfe bei Minecraft PvP Client Spiele- und Multimedia-Programmierung 21
K Minecraft Minecraft "Griefergames" CobbleBot Spiele- und Multimedia-Programmierung 10
lolzo Minecraft Minecraft: Exit Code: 0 Spiele- und Multimedia-Programmierung 3
N Musikplayer in Minecraft Spiele- und Multimedia-Programmierung 0
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
F Spigot 1.14 Minecraft Welt file löschen Spiele- und Multimedia-Programmierung 6
M Minecraft Spigot Plugin kompilieren Spiele- und Multimedia-Programmierung 4
N Minecraft Spigot-Plugin | Schusswaffe programmieren Spiele- und Multimedia-Programmierung 3
T Minecraft Event Plugin Spiele- und Multimedia-Programmierung 6
I Minecraft Support Bot Mod Spiele- und Multimedia-Programmierung 8
JeremyStarTM Minecraft Minecraft Spigot Server akzeptiert JAR-Version nicht Spiele- und Multimedia-Programmierung 8
M Minecraft Minecraft 1.12.2 Plotrand ändern Spiele- und Multimedia-Programmierung 1
L wo sehe ich die Range und die Hitbox im Minecraft Sourcecode? Spiele- und Multimedia-Programmierung 2
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
M Minecraft neue setDirection() (Blickrichtung) setzten Spiele- und Multimedia-Programmierung 5
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
Z Minecraft Multiplayer geht nicht Spiele- und Multimedia-Programmierung 2
A Minecraft Withdraw und Deposit Spiele- und Multimedia-Programmierung 1
A Minecraft Plugin, welches nur bestimmten Block zum bebauen festlegt Spiele- und Multimedia-Programmierung 26
L Minecraft 1.7.10 Server startet nicht Spiele- und Multimedia-Programmierung 1
B Minecraft Scoreboard Spiele- und Multimedia-Programmierung 3
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
T Minecraft Minecraft Scoreboard Spiele- und Multimedia-Programmierung 1
I Minecraft Minecraft Minigame Plugin (Bug) Spiele- und Multimedia-Programmierung 0
L Minecraft [Minecraft] Spigot und JavaFX mit fxml Spiele- und Multimedia-Programmierung 0
L Minecraft Minecraft Bukkit Entwickler Spiele- und Multimedia-Programmierung 0
C [Minecraft] Launcher Spiele- und Multimedia-Programmierung 14
T Minecraft Minecraft-Server pingt lange Spiele- und Multimedia-Programmierung 3
J Minecraft Coding BlockBreakEvent Spiele- und Multimedia-Programmierung 2
KeexZDeveoper Launcher (Minecraft) Spiele- und Multimedia-Programmierung 1
T Minecraft Spigot Plugin [Minecraft] Spiele- und Multimedia-Programmierung 1
T Minecraft Spigot Plugin [Minecraft] Spiele- und Multimedia-Programmierung 2
M Minecraft Minecraft Plugin Fehlermeldung! Spiele- und Multimedia-Programmierung 2
J Minecraft Minecraft Obfuscation Spiele- und Multimedia-Programmierung 1
C Minecraft Coding Spiele- und Multimedia-Programmierung 8
C Minecraft Coding Spiele- und Multimedia-Programmierung 5
I Minecraft Suche Plugin Developer für Minecraft Netzwerk! Spiele- und Multimedia-Programmierung 2
I Minecraft Plugin: Auf Spielerantwort warten Spiele- und Multimedia-Programmierung 1
M Minecraft Minecraft Plugin Fehlermeldung Spiele- und Multimedia-Programmierung 13
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
S Minecraft Minecraft crasht! Spiele- und Multimedia-Programmierung 3
I Minecraft: Craftingrecipe für Braustand ändern Spiele- und Multimedia-Programmierung 9
A Minecraft Minecraft Autojump Spiele- und Multimedia-Programmierung 2
H Minecraft Minecraft Error Spiele- und Multimedia-Programmierung 7
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
DanielsLPecke Minecraft Bukkit Scheduler. ALLGEMEIN. Spiele- und Multimedia-Programmierung 1
K Minecraft-Forge Mod Programmierung Spiele- und Multimedia-Programmierung 1
L Minecraft Minecraft Serversoftware Entwickler gesucht Spiele- und Multimedia-Programmierung 5
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
C Minecraft Plugin 'Ancient Gates' Spiele- und Multimedia-Programmierung 0
W Minecraft wie Minidumps aktivierren ? (kein Minecraft) Spiele- und Multimedia-Programmierung 0
C +++Minecraft Plug-In Programmierer gesucht+++ Spiele- und Multimedia-Programmierung 3
L Minecraft - BungeePerms Spiele- und Multimedia-Programmierung 1
F Minecraft Bot Mouse Inputs Spiele- und Multimedia-Programmierung 3
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
T Minecraft Bukkit Plugin Text Datei auslesen Spiele- und Multimedia-Programmierung 1
M Minecraft Minecraft Kit Plugin mit Eclipse Spiele- und Multimedia-Programmierung 8
X Minecraft Wie kann ich eine Karte erstellen wie zb:(Bei Minecraft) Spiele- und Multimedia-Programmierung 1
OnDemand Minecraft Minecraft Anforderungen Spiele- und Multimedia-Programmierung 1
A Minecraft Plugin Teleport Fehler Spiele- und Multimedia-Programmierung 1
H Minecraft Minecraft Plugin Spiele- und Multimedia-Programmierung 3
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
OnDemand Minecraft Minecraft Spiele- und Multimedia-Programmierung 5
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
H [Minecraft] Eclipse Spiele- und Multimedia-Programmierung 3
H Minecraft Minecraft counter Spiele- und Multimedia-Programmierung 1
N Minecraft Minecraft Mod Launcher Spiele- und Multimedia-Programmierung 1
D Minecraft Config in andere Class laden/Minecraft Plugin Spiele- und Multimedia-Programmierung 1
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
A Minecraft Minecraft, Programm funktioniert nur in Eclipse richtig Spiele- und Multimedia-Programmierung 24
N Minecraft java lernen minecraft Spiele- und Multimedia-Programmierung 20
T Minecraft Launcher Minecraft Spiele- und Multimedia-Programmierung 29
T Minecraft Minecraft im Forum Spiele- und Multimedia-Programmierung 16
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
I Minecraft Java programmierungs fehler "MineCraft" Spiele- und Multimedia-Programmierung 6
I Minecraft NBT Minecraft *.dat-Datei - Verständnisproblem Spiele- und Multimedia-Programmierung 26
R Minecraft Minecraft läuft nicht paralel mit minecraft server ? Spiele- und Multimedia-Programmierung 3
G Minecraft Minecraft / Knuddels Spiele- und Multimedia-Programmierung 7
1 Minecraft Minecraft Plugins programmieren Spiele- und Multimedia-Programmierung 6
J Minecraft Eigene Buttons "bauen" á la MineCraft Spiele- und Multimedia-Programmierung 11
D Minecraft Spieleranzahl von Minecraft Server abfragen Spiele- und Multimedia-Programmierung 8
F Minecraft Bukkit Plugin - Inventory wiederherstellung? Spiele- und Multimedia-Programmierung 2
A Minecraft Hilfe bei Minecraft Mod Spiele- und Multimedia-Programmierung 1

Ähnliche Java Themen

Neue Themen


Oben