2016-04-29 9 views
0

Ich erstelle eine Spielmodifikation, die MySQL verwendet, um Spielerdaten zu erhalten und zu speichern. Es aktualisiert seine Client-Daten alle 4 Sekunden aus der Datenbank, aber weil es blockiert, friert es etwa eine Sekunde ein, wenn es die Daten erhält.Einfache Möglichkeit zum Ausführen von MySQL-Abfrageanweisung Asynchorously in Java

Gibt es eine einfache Möglichkeit, den Befehl Asynchron ausführen?

+0

Datenbankabfragen dauern nicht lange (10s von Millisekunden) Vielleicht sollten Sie neu bewerten, wie und wie oft Sie tatsächlich Datenbankzugriff durchführen. Vielleicht könnte Caching funktionieren? –

+0

Hmm, ich denke ich sehe meinen Fehler dann. Ich habe Objekte für alle Arten von Dingen wie private Nachrichten, Status-Updates usw. Wenn jedes Objekt erstellt wird, führt es eine Abfrage aus. –

+0

Verwenden Sie einen zusätzlichen Thread, der alle 4 Sekunden aufwacht (Thread.sleep (4000)) und die Datenbankabfrage macht, wirklich nette Tutorials hier http://tutorials.jenkov.com, setzen Sie auch den autoCommit (false) und committen Sie oft . – GOXR3PLUS

Antwort

0
ExecutorService executor = Executors.newSingleThreadExecutor(); 
    executor.submit(() -> { 
     //Your jdbc call here 
     SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      // Here, we can safely update the GUI 
      // because we'll be called from the 
      // event dispatch thread 
      MW.append(foo); 
     } 
    }); 
    }); 
+0

Aber können Threads wie diese Variablen im Hauptthread ändern? –

+0

@NicholasHarris, ich habe meine Antwort aktualisiert bitte überprüfen Sie es und upvote und markieren Sie als Antwort, wenn es Ihnen hilft – suulisin

+0

Ich werde das versuchen und als Antwort markieren, wenn es funktioniert. Vielen Dank! –

0

Wenn Sie dies nicht bereits tun, verwenden Sie Threads. Überschreiben Sie die run() -Methode für Dinge, die Sie in Java asynchron ausführen möchten.

Auch nur sicherstellen, dass Sie warten, bis der Server die Datenbankdaten zurückgibt, bevor eine andere Anfrage richtig ausgeführt wird?

+0

Ich kann keine Threads verwenden, weil sie Variablen im Hauptthread nicht ändern können. –

Verwandte Themen