Javaの基礎 - <スレッドプール>

 

 

 

1.インタフェースエグゼキュータ


無効(Runnableをコマンド)を実行し
、いくつかの将来の時点で指定されたコマンドを実行します。

2.接口パブリックインタフェースExecutorServiceのは、拡張  執行を


(Runnableをタスク)を提出
実行用のRunnableタスクを送信し、タスクの将来の表現を返します。
(呼び出し可能<T>タスク)を提出
タスクを実行するために、戻り値を提出し、将来の保留中の結果を表すタスクに戻ります。
(コレクション<?コーラブル<T拡張 >>タスク)をinvokeAll
与えられたタスクの実行、すべてのタスクが完了したとき、状況と今後のリストの結果を維持するために戻ります。
シャットダウン()は
、正常なシャットダウンを開始し、以前に提出したタスクを実行しますが、新しいタスクを受け入れません。
一覧は<Runnableを> shutdownNowの()
実行中のアクティブなタスクすべての停止を試み、タスクが待っている処理を停止し、実行を待っているタスクのリストを返します。

 


3.接口パブリックインタフェースScheduledExecutorServiceは拡張ExecutorServiceのを

ExecutorServiceのは、所定の遅延後に実行するコマンド、又は周期的に配置することを実行します。

 


4、抽象类パブリック抽象クラスAbstractExecutorServiceは実装ExecutorServiceのを

 

スレッドプールのクラスのクラス公開ThreadPoolExecutor拡張でAbstractExecutorServiceを

コアおよび最大プールサイズ
新しいタスクの送信方法を実行(java.lang.Runnableの)において、
スレッドは、他のワーカースレッドがアイドル状態であっても、corePoolSize未満を実行する要求を処理するために新しいスレッドを作成する場合。
スレッドがcorePoolSize以上とmaximumPoolSize未満を実行している場合は、キューがいっぱいになった場合は、新しいスレッドを作成する場合にのみ、(アイドル優先度のスレッドを使用して、アイドルスレッドが新しいスレッドを作成することはなかったがあります)。
corePoolSizeとmaximumPoolSize設定が同じであれば、固定サイズのスレッドプールを作成します。
maximumPoolSize実質的に無限の設定値(例えば、Integer.MAX_VALUEの)場合、プールは、同時タスクの任意の数を適合させることができます。

新しいスレッドを作成し
、新しいスレッドを作成するThreadFactory使用。特に指定がない場合は、同じスレッドグループには、必ず(Executors.defaultThreadFactoryを使用)スレッドを作成し、
そしてこれらのスレッドは、同じNORM_PRIORITY優先順位と非デーモンのステータスを持っています。
異なるThreadFactoryを提供することにより、あなたはその上のスレッドの名前、スレッドグループ、優先順位、デーモン状態などを変更することができます。
nullがnewThreadスレッドから返された場合、プログラムの実行を実行してまいりますが、任意のタスクを実行することはできませんThreadFactoryの作成に失敗しました。

キープアライブ
アイドル時にプールが現在corePoolSizeスレッドよりも多くを持っている場合は、これらの余分なスレッドは、プールが非アクティブ状態にあるときに、リソースの消費を低減するための方法を提供keepAliveTimeが、より多くのために終了します。
効果的に前の終了前にアイドル状態からスレッドを無効値はLong.MAX_VALUEのTimeUnit.NANOSECONDSを使用して閉じました。

 

方法:
公共ThreadPoolExecutor(INT corePoolSize、
INT maximumPoolSize、
長いkeepAliveTimeが、
TimeUnitでユニット、
BlockingQueueの<Runnableを>ワークキュー)

初期パラメータおよびデフォルトのスレッドファクトリを考えると、拒否された実行ハンドラは、を使用して、新しいThreadPoolExecutorを作成します。はるかに便利普遍的なコンストラクタを使用するよりもあるエグゼキュータのファクトリメソッドのいずれかを使用します。

:パラメータの
アイドルスレッドを含むプールに保持するスレッドの数、 - corePoolSize。
maximumPoolSize -プールで許可されるスレッドの最大数。
keepAliveTimeが-は、スレッドの数がコアよりも多い場合、これは新しいタスクの最長時間を待っている余分なアイドル状態のスレッドの前に終了されます。
単位-時間単位のkeepAliveTimeがパラメータ。
ワークキュー-タスクを実行する前にキューを保持します。このキューは、executeメソッドにより提出されたRunnableタスクを保持しています。

 

allowCoreThreadTimeOut(ブール値)
keepAliveTimeが時間、スレッドコアと非コアスレッドタスクのタイムアウトを設定します。

シャットダウンは
、新しいスレッドを受け入れ、閉鎖されているスレッドを実行する前に待機して提出していません

shutdownNowの
直接すべてのスレッドのアクティブオフ状態、および待機中のスレッドに戻ります

 

クラス6.public のScheduledThreadPoolExecutor拡張するThreadPoolExecutor実装ScheduledExecutorService

スケジュール(<?> Runnableをコマンドは、公共ScheduledFuture
;長時間の遅延、TimeUnitでユニット)が
与えられた遅延時間に達した後、タスクを実行します。ここでは、着信タスクはRunnableを実装するので、()は、結果はScheduledFuture.getによってnullの取得

公共<V> ScheduledFuture <V>スケジュール(呼び出し可能<V>コーラブル、
長時間の遅延、TimeUnitでユニット);
指定した拡張子まで時間後の時間は、タスクを実行します。ここでは、着信呼び出し可能インターフェースを達成するためのタスクがあるため、戻りは、タスクの最終結果であります

公共ScheduledFutureそのscheduleAtFixedRate(Runnableをコマンド、<?>
ロングinitialDelayの、
長い期間、
TimeUnitでユニット);
タスクが終了した場合、時間の実行期間が、完了したか否かを、過去の後、タスクの検出を開始するためのタスクよりも多くの時間までの時間、現在のタスクの実行タスクが完了していない場合は、直ちに、我々はタスクはすぐに実行を完了した後に待機する必要があります

公共scheduleWithFixedDelay ScheduledFuture(Runnableをコマンドを、<?>
ロングinitialDelayの、
長時間の遅延、
TimeUnitでユニット);
あなたは、遅延時間がinitialDelayに到達すると、タスクが開始されました。次に、タスク実行、遅延の中間の遅延間隔で実行されるタスクの完了後。このように、定期的なタスク。

 


クラス7:エグゼキュー

(nthreadsの値INT)ExecutorServiceのnewFixedThreadPool静的
//固定サイズのスレッドプール(コア・スレッドの数と同じスレッドの最大数)を作成

静的ExecutorServiceのnewCachedThreadPool(ThreadFactory threadFactory)
スレッドプールを作成するには、新しいスレッドを作成する必要があるかもしれないが、彼らは可能な場合、以前に構築されたスレッドを再利用し、新しいスレッドを作成するThreadFactoryを提供し、使用するために必要なときます。

)静的ExecutorServiceのnewSingleThreadExecutor(
単一スレッドプールのスレッドを作成する(コアのスレッドの数及びスレッドの最大数は1です)

静的ScheduledExecutorService newScheduledThreadPool(INT corePoolSize)
(int型の最大値に炉心パラメータにスレッドの数が与えられ、スレッドの最大数)固定サイズのスレッドプールを作成します


= Executors.newCachedThreadPool ExecutorServiceの();
//無制限の長いスレッドプールを作成する(コアのスレッド数がスレッドの最大数が最大INT、0です)

 

 

ExecutorsTestクラス{パブリック
    ストリングTAG =「ExecutorsTest」; 

    戻り値//呼び出し可能なスレッド得る
     公共ボイドstartThreadPool(){ 
         SumCallable sumCallable =新しい新しいSumCallableを(); 
         //は、固定サイズのスレッドプール(コアパラメータにスレッドの数を所定の最大スレッドを作成INTの最大数)
         ExecutorServiceのExecutors.newCachedThreadPoolエグゼキュータ=(); 
         今後<整数> = executors.submit将来(sumCallable); 
         試み{ 
             メソッドを遮断//future.getである
             Log.e(TAG、 "SUM1 =" + Future.get()); 
         }キャッチ(例外E){ 
             e.printStackTrace(); 
         } 
     } 

    //戻り値が実行可能ではない
    公共のボイドstartThreadPool2(){ 
        )SumRunnable sumCallable =新しいSumRunnable(。 
        //は(最大INTに、パラメータとしてスレッドの最大数を固定コアスレッド)スレッドプールされた固定長を作成
        ExecutorServiceのエグゼキュータ= Executors.newScheduledThreadPool(20である); 
        executors.submit(sumCallable); 
    } 

    //タスクの実行遅延
    公共ボイドstartThreadPool3(){ 
        SumRunnable sumCallable新しい新しいSumRunnableを=(); 
        //(コアパラメータにスレッドの数、整数の最大値にスレッドの最大数を指定された)固定サイズのスレッドプールを作成
        ScheduledExecutorServiceエグゼキュータ= Executors.newScheduledThreadPool (100); 
        executors.schedule(sumCallable、3は、TimeUnit.SECONDS)は、
        Log.eは(TAGは、 "3秒後に実行される"); 
    } 

    //戻り値が実行可能ではない
    )公共ボイドstartThreadPool4({ 
        SumRunnable sumCallable =新しい新しいSumRunnable ();
        //(最大INTに、パラメータとしてスレッドの最大数を固定コアスレッド)スレッドプールされた固定長を作成 
            Log.e(TAG、 "SUM =" SUM +)。
        ExecutorServiceのエグゼキュータ= Executors.newCachedThreadPool(新ThreadFactoryTest()); 
        executors.submit(sumCallable)。
    } 



    publicクラスSumRunnableはRunnableを実装{ 
        @Override 
        公共ボイドラン(){ 
            Log.e(TAGを、 "开始执行")。
            int型の合計= 0; 
            用(int型のk = 0; K <100; kは++){ 
                和+ = K。
                {試みる
                    のThread.sleep(30)。
                }キャッチ(InterruptedExceptionある電子){ 
                    e.printStackTrace(); 
                } 
            } 
    publicクラスSumCallableは呼び出し可能<整数> {実装します
        } 
    } 
        公共スレッドnewThread(Runnableをr)を{

        @Override 
        パブリック整数コールは()例外{スロー
            int型の和= 0; 
            用(int型のk = 0; K <100; kは++){ 
                和+ = K。
                {試みる
                    のThread.sleep(30)。
                }キャッチ(InterruptedExceptionある電子){ 
                    e.printStackTrace(); 
                } 
            } 
            Log.e(TAG、 "和=" +合計)。
            合計を返します。
        } 
    } 

    publicクラスThreadFactoryTestはThreadFactory {実装

        @Override
              新しいスレッド(r)を返します。
        }
            Log.e(TAG、 "ThreadFactoryTest newThread"); 
    } 
}

  

 

おすすめ

転載: www.cnblogs.com/jtzp007/p/11448515.html