問題タブ [scheduledexecutorservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
threadpool - ScheduledThreadPoolExecutor のシャットダウン後の future.get は機能しますか?
ScheduledThreadPoolExecutor を使用し、ジョブを送信した後、すぐにシャットダウンを呼び出します。ドキュメントによると、シャットダウンは送信されたタスクを強制終了せず、実行中のタスクを完了させます。
問題は、ScheduledThreadPoolExecutor サブミットが返す将来のオブジェクトをシャットダウン後も引き続き使用できるかどうかです。
android - ScheduledExecutorService.schedule(Runnable r, Long delay, TimeUnit t) が遅延を無視して即座に実行されるのはなぜですか?
Runnable の実行を特定の遅延でスケジュールするために使用したい ScheduledExecutorService があります。ただし、そのスケジュール メソッドを呼び出すと、遅延は完全に無視され、Runnable は即座に実行されます。これは私のコードです:
私の ScheduledExecutorService コンストラクター:
これはそのスケジュール メソッドの呼び出しです (ログで囲まれています)。
ログを見ると、予想していた 1000 ミリ秒ではなく、「スケジュール前」と「設定クリア...」の間に 20 ~ 30 ミリ秒の遅延しかないことがわかります。
スケジュール メソッドに関するドキュメントには次のように書かれています。
指定された遅延後に有効になるワンショット アクションを作成して実行します。
このコンテキストで「有効にする」という用語は正確には何を意味しますか?
どんな助けでも大歓迎です。
編集: Long (1000L) を使用している場合でも、コードはすぐに実行されるようです。
java - ScheduledExecutorService が開始されたことをどのように確認しますか?
説明
タスク A が実行されており、2 秒から 60 秒以上かかることがあります。
A の実行中に、10 秒 (遅延) 後に 5 秒ごと (固定レート) に「実行中」と出力される ExecutorService をスケジュールしました。
Aが完了したら、「Aが完了しました」と出力したいと思います。ただし、ScheduledExecutorService タスクが開始された場合のみ、つまり少なくとも 1 回は「実行中」と出力されます。
- A が 10 秒前に終了した場合、何も印刷しません。
- A に 10 秒以上かかる場合は、5 秒ごとに「実行中」と出力し、A が終了したら「完了」と出力します。
schduled 内でブール値フラグを使用せずに、どうすればそれを行うことができますかrunnable
。サービスが開始されたことを確認する方法はありますか?
java - ScheduledThreadPoolExecutor について
java.util.Timer
さまざまな理由により、代わりにこれを使用する必要があることはわかっています。だから、これを研究するために私はドキュメントを見ていて、いくつか質問があります:
- どのように動作し
scheduleWithFixedDelay()
ますか? 私の理解は次のとおりです。特定の遅延の後に最初にタスクを実行します。タスクが完了すると、指定された時間待機してから、タスクを再度実行します。 scheduleAtFixedRate()
指定された delay よりも実行に時間がかかるタスクを に送信するとどうなりますか? タスクを5秒ごとに実行したいのですが、完了するまでに10秒かかります。 私の理解では、タスクはキューに保持され、コアスレッドが利用可能になると実行されますscheduleWithFixedDelay()
これがどのようにscheduleAtFixedRate()
異なる かについての私の理解ですscheduleWithFixedDelay()
。タスクの実行が完了するのを待ち、指定された時間だけ待ってから、タスクscheduleAtFixedRate
が完了したかどうかを気にせずにタスクを起動し続けるタスクを再度起動します。正しい?
java - Web アプリケーションで ScheduledExecutorService を実行することに何らかの影響がありますか
Java Webアプリケーション内で事前定義された間隔でタスクを実行することを考えています.Webアプリケーション内でスレッドを開始することは、何らかの理由で正しくないと聞きました。WebアプリでScheduledExecutorServiceを実行すると、どのような影響があるのだろうと思っています。
java - ScheduledExecutorService はタスクの完了を待機します
新しいファイルのフォルダーをチェックするための新しいスレッドを作成し、定義された期間スリープします。
私の好みは ScheduledExecutorService を使用することですが、現在実行中のタスクが完了するのを待ってから新しいタスクを開始するかどうかを明確にするドキュメントが見つかりません。
たとえば、次のコードでは。
に 30 秒以上かかる場合、run()
終了する前に新しいエージェントが作成されますか?WatchAgent
次に、 のインスタンスを作成した場合、WatchAgent
定期的な実行ごとに同じインスタンスを使い続けることはできますか?
java - Java ScheduledExecutorService BAD 精度
こんにちは、ScduledExecutorService.schedule() 関数の精度をテストする簡単なプログラムを作成しました。
テストは遅延を設定し、必要な遅延と有効な結果の間の有効な距離をチェックします。
テストは、OpenJDK 1.7 と Oracle JDK 1.7 の両方を使用して、Linux 3.8 x86_64 を実行する i7 マシンで実行されました。
テストの結果は非常に悪いです。ここに、推定遅延と実際の遅延の間の平均デルタを示すリストがあります。
伝説:
- Sleep(ms) : 必要なミリ秒単位の遅延
- deltaAVG(ms) : 必要な遅延と有効な遅延の平均差(ミリ秒単位)
- deltaAVG_PERC : 必要な/有効なエラー率
- delta MIN/MAX : 必要な遅延と有効な遅延の間の最小/最大差
ご覧のとおり、deltaAVG と呼ばれる平均エラーは、遅延に対して相対的に増加しています。
遅延でより良い結果を得るにはどうすればよいですか? つまり、i7 マシンで 10 マイクロ秒で 300% のエラー率は多すぎるということです。
テストに使用したコードは次のとおりです。