Javaの並行処理:(中)スレッドプールを取得

スレッドプールにジョブを送信

1.1(実行)

    戻り値を必要としないタスクを提出するためには、タスクが正常にプールスレッドで実行されているかどうかを決定することは不可能です。入力はRunnableをインスタンスです。

公共 ボイドは(Runnableをコマンド){e.execute(コマンド)を実行します。}

    特別な要件がない場合、キャッシュスレッドプールが最も適切である使用。

    あなたは一つだけのスレッドを実行できる場合は、1つのスレッドプールを使用します。

    あなたはスケジュールされたタスクを実行する場合、オンデマンドまたはスケジュールスレッドプールシングルスレッド・プール。

    他に特別な要件がない場合は、スレッドプールを作成するために、直接ThreadPoolExecutorクラスのコンストラクタを使用して、自分自身に7つのパラメータを与えることができます。

公共の静的な無効メイン(文字列[]引数)がExecutionException、例外:InterruptedExceptionをスロー{ 
        ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(3)。
        一覧<今後の<string >>一覧=新しいArrayListを<>(); 
        以下のために(;私は100を<;私は= 0 int型私は++){ 
            //任务放到阻塞队列
            executorService.execute(新しいRunnableを(){ 
                @Override 
                ます。public void実行(){ 
                    しようと{ 
                        TimeUnit.SECONDS.sleep(2); 
                    }キャッチ(InterruptedExceptionある電子){ 
                        e.printStackTrace(); 
                    } 
                    のSystem.out.println(にThread.currentThread()のgetName()。)。 
                } 
            })。
        }

  

1.2(提出)

   タスクの必要な戻り値を提出するために、スレッドプールは、オブジェクトの今後の種類を返します、オブジェクトは、タスクが正常に実行され、()タスクが完了したことを知っている現在のスレッドをブロックしますget()は、取得した値を返します、とされているかどうかを判断することができます取得(ロング、ユニット)メソッドは、タスクが実行されていない可能性があり、時間のブロッキング期間後すぐに戻ります使用しています。

公共の静的な無効メイン(文字列[]引数)がExecutionException、例外:InterruptedExceptionをスロー{ 
        ExecutorServiceのExecutorServiceの= Executors.newFixedThreadPool(3)。
        一覧<今後の<string >>一覧=新しいArrayListを<>(); 
        以下のための(I = 0 int型;私は100を<;私は++){ 
            //任务放到阻塞队列
            フューチャー<文字列> F = executorService.submit(新しい呼び出し可能<文字列>(){ 
                @Override 
                パブリック文字列の呼び出し()は例外{スロー
                    するTimeUnitを.SECONDS.sleep(2) 
                    )(にThread.currentThreadを返すのgetName(); 
                } 
            })。
            list.add(F)。
        } 
        私は()はlist.sizeを<;ための式(I = 0 int型。
            System.out.println(list.get(I)に.get()+ "--------------" + I + "-------------- ----------- "); 
        } 
    }

スレッドプールを閉じます

    シャットダウンまたはshutdownNowのメソッドを呼び出すことにより、スレッドプールのスレッドプールを閉じます。

    彼らは、スレッドプールのワーカースレッドを横断する2つの原則であり、端末が終了したことがないかもしれタスクには対応できませんので、その後1 1つの通話割り込み法スレッドによって、ターミナルをスレッドします。

    shutdownNowのは:まず、スレッドプールの状態を停止し、その後、実行されているすべてのスレッドを停止したり、タスクを中断しようとするように設定し、実行を待っているタスクのリストを返します。

    シャットダウン:唯一のスレッドプールの状態がシャットダウン状態に設定されている、すべてのスレッドの後、真ん中には、タスクを実行していません。

    すべてのタスクが閉じられたときに限り、発信者2は、方法のいずれかを閉じると、isShutdownメソッドは、trueを返す、それはisTerminaedメソッドを呼び出しているスレッドプールメロンの女性の成功は、trueを返すことを示しています。

    通常のシャットダウン方法タスクは必ずしも実行されていない場合、あなたはshutdownNowのメソッドを呼び出すことができ、スレッドプールを閉じます。

    有界キューを使用して、あなたは早期警戒システムの安定性と容量を増やすことができます。

スレッドプールの状態

    1.スレッド・プールが作成され、最初に実行されている状態

    2.コールのシャットダウン方法の後、シャットダウン状態では、問題はもはや既存のジョブが終了するのを待っている、新しいタスクを受け入れています

    3. shutdownNowの実行方法は、新しいタスクを受け入れ、実行中のタスクを終了しようとしないで、停止状態に入ります

    すべてのワーカースレッドが破壊されている場合は、シャットダウンまたは停止状態、および4は、タスクキューは、キャッシュは、スレッドプールが終了状態に設定されている空です。

     *可能な状態遷移:
     * NEW - >補完----------------- - > NORMAL 
     * NEW - >補完----------------- - > EXCEPTIONAL 
     * NEW - > CANCELED 
     NEW * - >中断- > INTERRUPTED 

    プライベート静的最終int型NEW = 0; 
    = 1を完了したプライベート静的最終int型。
    プライベート静的最終int型NORMAL = 2; 
    プライベート静的最終int型EXCEPTIONAL = 3; 
    = 4 CANCELEDプライベート静的最終int型。
    プライベート静的最終int型の中断= 5; 
    プライベート静的最終int型INTERRUPTED = 6;

  

おすすめ

転載: www.cnblogs.com/dc-earl/p/11126825.html