私はMySQLを使用してプレーヤーのデータを取得し保存するゲームの変更を作成しています。 4秒ごとにデータベースからクライアントデータをリフレッシュしますが、ブロックするため、データを取得すると約1秒間フリーズします。MySQLクエリステートメントを実行する簡単な方法Javaで非同期的に
コマンドasyncを実行する簡単な方法はありますか?
私はMySQLを使用してプレーヤーのデータを取得し保存するゲームの変更を作成しています。 4秒ごとにデータベースからクライアントデータをリフレッシュしますが、ブロックするため、データを取得すると約1秒間フリーズします。MySQLクエリステートメントを実行する簡単な方法Javaで非同期的に
コマンドasyncを実行する簡単な方法はありますか?
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);
}
});
});
しかし、このようなスレッドはメインスレッドの変数を変更できますか? –
@NicholasHarris、私は私の答えを更新しました。それをチェックしてupvoteと答えをマークしてください。 – suulisin
私はこれを試して、それが動作すれば答えをマークします。ありがとうございました! –
まだ実行していない場合は、スレッドを使用してください。 Javaで非同期に実行したいもののrun()メソッドをオーバーライドします。
また、別のリクエストを実行する前に、サーバーがデータベースのデータを返すまで待っていますか?
メインスレッドの変数を変更できないため、スレッドを使用できません。 –
データベースクエリには時間がかかりません(10秒間)実際にデータベースへのアクセスの頻度と頻度を再評価する必要があります。キャッシングが機能するかもしれませんか? –
ええと、私は私のエラーを見ていると思います。プライベートなメッセージやステータスの更新など、あらゆる種類のオブジェクトを持っています。各オブジェクトが作成されると、クエリが実行されます。 –
4秒ごとに起きるスレッド(Thread.sleep(4000))を使用して、データベースクエリを実行します。ここでは本当に素敵なチュートリアルをhttp://tutorials.jenkov.comで、autoCommit(false)を設定して頻繁にコミットします。 – GOXR3PLUS