2016-10-16 8 views
0

Platform.runLater()が達成したいのは現在のスレッドであり、プログラムはJavaFXに関連していないTomcatサーバーです。現在のスレッド上のRunLaterまたは後で実行する現在のスレッドにタスクを与える

私はPlatform.runLater(this::foo);をしようとしましたが、何もしないと確信しています。おそらく、JavaFXスレッドがないからです。

ScheduledExecutorServiceは多くのインスタンス(非常に多くのスレッド)の別のスレッドになるので、実行する必要があるメソッドはもちろん、​​なので、デッドロックの匂いがします。

Thread.currentThread()runstartはパラメータを取らない)で便利なメソッドが見つかりませんでした。

これを行う別のオプションはありますか?

+0

「後で実行する」コードで何をしようとしていますか?なぜなら、このセマンティックは、リクエスト/レスポンス指向サーブレットAPIに(直接的に)存在するものではないからです。 –

+0

これはクライアントから独立して実行する必要のあるコードです。要するに、これはゲームであり、このコードは "AI"プレイヤーを実行します。 JavaFX上の問題のようです:http://stackoverflow.com/questions/39395942/breaking-recursion-from-listeners @JohannesWachter – shinzou

+0

任意の既存のスレッドに対してタスクをスケジュールすることはできません。これは、スレッドが実行するタスクのキューをアクティブにチェックするフレームワークでのみ機能します。しかし、これはxyの問題と思われます。現在のスレッドを使用するあなたの欲求は問題を解決しようとしているから、この方法では解決できません。 – Holger

答えて

0

これを達成するために、複数のランナブルをキューに入れて順番に実行できるため、いくつかの場所からタスクを与えて1つずつ実行することができます。platform.runLaterに似ています。

クラスのすべてのインスタンスが参照を保持する1つのスレッドを持つと、「多くのスレッド」問題が解決されます。

デッドロックも発生しません。他のスレッドが同期化された関数を終了してから、この1つの関数だけを実行するまで待つ必要があります。

関連する問題