0

いくつかのライブラリを介して、この関数を 1 つのインスタンスで同時に 2 回呼び出していることに気付きました (Executors.newSingleThreadScheduledExecutor によって返される実装を使用)。2 番目の呼び出しに渡された Runnable は、すぐにも次のスケジュールされたスロットでも実行されないようで、例外は発生しません。2 つの呼び出しをシリアル化すると (2 番目の呼び出し元のスケジューリング呼び出しの前にブレークポイントを配置することで、これを非常に大雑把かつ意図せずに行った)、2 番目のランナブルは問題なく実行されます。

私はこのインターフェイスを初めて使用しますが、これらのスケジューリング関数は再入可能に設計されているようには見えません。しかし、ここで何が起こるべきかを説明しているさまざまなドキュメントには何も見つかりません。

4

1 に答える 1

0

まあ、小さなテストケースでは問題を再現できないので、関数が再入可能ではないと信じる理由はありません。実際に問題を解決したのは、リクエスト時からサーバーの起動まで、これらすべてを削除することでした。OPで言及したブレークポイントの一時的な修正のように、スタックのどこかにあるひどいタイミングの問題を示している他の兆候がいくつかありました。

于 2012-10-24T23:09:29.593 に答える