0

スケジュールされたスレッド プール--->

private static ScheduledExecutorService pendingCheckScheduler = Executors.newScheduledThreadPool(1);

スレッド 1 --->

private ScheduledFuture<?> pendingTranStatusCheckHandle=pendingCheckScheduler.scheduleAtFixedRate(new PendingTranStatusCheck(),0,checkForPendingTrans,TimeUnit.SECONDS );

スレッド2--->

private ScheduledFuture<?> forcibleBatchCloseHandle=pendingCheckScheduler.schedule(new ForcibleBatchClose(), waitForPendingTrans, TimeUnit.MINUTES);

Thread 110秒ごとに実行されています。Thread 230分後に開始することになっています。

Thread 1Thread2は、30 分後に開始することが期待されている場所で、1 時間後に開始する期待どおりに動作しています。

のレイテンシがthread1この問題の原因ですか?もしそうなら、thread2スレッド プールにスレッドが 1 つしかないことを考えると、スレッド 1 が終了したときにスレッド 1 が優先されるはずです.なぜThread2ストレッチが長すぎて 1 時間後に開始できないのですか?

私は無知で、いくつかの指針を期待しています。助けてください。

4

2 に答える 2

3

これは、エグゼキューターに単一のスレッドがあるためです。

Executors.newScheduledThreadPool(1);

最初の Runnable が終了するまで、2 回目の Runnable 待機が発生します。

2 つのスレッドを使用してみてください。

Executors.newScheduledThreadPool(2);
于 2013-04-25T08:58:21.887 に答える
3

あなたのコンセプトはわずかにずれているため、結論が相殺されます。全体で1 つのスレッドがあり、その 1 つのスレッドで実行するようにスケジュールされた 2 つのタスクがあります。したがって、繰り返されるタスクが長時間実行され、スレッドが占有される場合、干渉が確実に予想されます。

于 2013-04-25T08:58:55.343 に答える