java Executor类的注释部分什么意思?
大家讲道理
大家讲道理 2017-04-17 16:46:21
0
2
321
许多 Executor 实现都对调度任务的方式和时间强加了某种限制。以下执行程序使任务提交与第二个执行程序保持连续,这说明了一个复合执行程序。
 class SerialExecutor implements Executor {
     final Queue<Runnable> tasks = new LinkedBlockingQueue<Runnable>();
     final Executor executor;
     Runnable active;

     SerialExecutor(Executor executor) {
         this.executor = executor;
     }

     public synchronized void execute(final Runnable r) {
         tasks.offer(new Runnable() {
             public void run() {
                 try {
                     r.run();
                 } finally {
                     scheduleNext();
                 }
             }
         });
         if (active == null) {
             scheduleNext();
         }
     }

     protected synchronized void scheduleNext() {
         if ((active = tasks.poll()) != null) {
             executor.execute(active);
         }
     }
 }

没看明白, 这个在外面该如何使用呢? 构造参数Executor是干什么的, 怎么连续的提交任务?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全員に返信(2)
黄舟

Executor の詳細については、「Java Concurrent Programming-Executor Framework」を参照してください。 SerialExecutor の機能は、指定された (コンストラクター関数を通じて渡された) Executor オブジェクトを使用して、タスクを順番に実行することです (execute() メソッドを通じて実装されます)

SerialExectuor.execute() は、受信した Runnable をキューに入れ、順番に実行します。キューが空の場合 (初期または実行済み)、受信した Runnable オブジェクトはすぐに開始されます。大体こんな感じです

リーリー
いいねを押す +0
伊谢尔伦

SerialExecutor と他の Executor の違いは、execute(final Runnable r) を使用してタスクを送信すると、現在のタスクが完了すると、次のタスク (つまり、scheduleNext()) の実行が継続されることです。コードは最終的に機能するため、継続的に実行されます。

通常の Executor フレームワークは、スケジューラー自身のスレッドの run メソッドを通じてワイヤレス ループ内のキュー内のタスクを読み取り、タスクの実行をトリガーします。一方、SerialExecutor は各タスクで明示的にスケジュールネクストを呼び出して、次のタスクの実装をトリガーします。 。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!