私は別のスレッドでMySQL接続を持つサーバーを作成しているので、イベント駆動型でメインスレッドをブロックしません。あるスレッドから他のスレッドで実行するメソッドを呼び出す
これまではうまくいきましたが、それは返さない(挿入など)クエリではうまくいきますが、他のスレッドで実行されるコールバックメソッドを実装する方法がわかりません。私が単にデータベース接続スレッドからメソッドを呼び出すと、そのメソッドはそのスレッドで実行されます。
これを行うにはどうすればよいでしょうか?
私は別のスレッドでMySQL接続を持つサーバーを作成しているので、イベント駆動型でメインスレッドをブロックしません。あるスレッドから他のスレッドで実行するメソッドを呼び出す
これまではうまくいきましたが、それは返さない(挿入など)クエリではうまくいきますが、他のスレッドで実行されるコールバックメソッドを実装する方法がわかりません。私が単にデータベース接続スレッドからメソッドを呼び出すと、そのメソッドはそのスレッドで実行されます。
これを行うにはどうすればよいでしょうか?
java.util.concurrent.FutureTask
があります。
もしそうでなければ、あなたのDBスレッドはコマンド/クエリプールを実装でき、各コマンド/クエリに対して、リフレクションを使って特定のオブジェクトのコールバックメソッドを呼び出すことができるかもしれません。これにより、非ブロッキングコマンドキューイングとコマンド/クエリ完了の通知が可能になります。
あなたが
一つのメカニズムはFutureTaskインスタンスのキュー(ConcurrentLinkedQueue)を有することがある結果に対処するオブジェクトにjava.util.concurrent.Futureと手にこれを使用することができます。アプリケーションスレッドは、キューにインスタンスを追加し、次にタスクをポーリングして完全性を確認します。データベース接続スレッドは、タスクを処理するためにキューをポーリングします。
通常、コールバックは別のスレッドで実行されます。呼び出しスレッドで何かを呼び出す場合は、FutureオブジェクトでExecutorServiceを使用します。どのスレッドが作業をしても気にしない場合は、DBクエリを実行するスレッドで呼び出すか、別のスレッドプールにタスクを追加します。
はここExecutorServices
http://tutorials.jenkov.com/java-util-concurrent/executorservice.html
はランナブルのキューを使用し、非接続スレッドを選択し、そのキューから実行してみましょうを使用してのいくつかの例がありますか? – Fakrudeen
私はマルチスレッド化をかなり新しくしていることに留意してください。「選択して実行する」とは何かを説明できますか? –