スレッドプールを導入する1つの理由
スレッドのライフサイクルには作成、準備ができている、実行、ブロック、破壊されたステージが含まれているため、保留中のタスクの数が小さい場合、対応するタスクを処理するためにいくつかのスレッドを作成できますが、多数の場合タスクの場合、スレッドの作成と破壊には多くのオーバーヘッドが必要であり、スレッドプールを使用すると、これらの問題が大幅に軽減されます。
2スレッドプールの使用
エグゼキュータークラスが提供する静的メソッドを使用して、対応するスレッドプールを作成する必要があります。
public static executorsevice NewsLethReadExecutor()Public Static Executorsevice NewFixedThreadPool()Public Static ExecutOrseVice NewCachedThre Adpool()
NewsLethExecutorは、複数のタスクがこのエグゼクティブに引き渡されると、1つのタスクを処理し、次のタスクを処理します。
NewFixedThreadPoolは、指定されたスレッドの数を含むスレッドプールを返します。
NewCachedThreadPoolは、ユーザーのタスクの数に基づいて対応するスレッドを作成します。スレッドの数は制限されず、JVMが作成できるスレッドの数に完全に依存します。
以下に示すように、実行可能なインターフェイスの実装クラスをパラメーターとしてスレッドプールの実行メソッドに渡すだけで、タスクを実行するタスクを配置する必要があります。
executor executor = executors.newsinglethreadexecutor(); executor.execute(new runnable(){public void run(){// executed tasks}}}パラメーターをタスクに渡す必要がある場合は、実行可能なインターフェイスの実装クラスを作成することで実行できます。
3。例
(1):Newsinglethreadexecutor
mythread.java
publicClassMyThread extends thread {@override publicvoid run(){system.out.println()。 {//固定されたスレッドエグゼクティブプール= executor()を再利用できるスレッドプールを作成します。 ;スレッドT2 =新しいMythRead(); pool.execu(T2);出力結果
pool-1-thread-1が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。
(2):NewFixedThreadPool
testfixedthreadpool.java
publicClass testfixedThreadPool {publicStaticVoid(String [] args){//固定されたスレッドのエグゼクティブプールを再利用できるスレッドプールを作成します。 runnableインターフェイスT1 = new MythRead();プールを実行すると、execute(T2); }}出力結果
pool-1-thread-1が実行されています。 。 。 Pool-1-Thread-2が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。 Pool-1-Thread-2が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。
(3):NewCachedThreadPool
testcachedthreadpool.java
publicCachedThreadPool {publicStaticVoid(String [] args){//固定されたスレッドのエグゼクティブプール= executors.newcachedthreadプール()を再利用できるスレッドプールを作成し、スレッドオブジェクトも作成します。 runnableインターフェイスT1 = new MythRead(); Pool.execute(T2); }出力結果:
Pool-1-Thread-2が実行されています。 。 。 Pool-1-Thread-4が実行されています。 。 。 Pool-1-Thread-3が実行されています。 。 。 pool-1-thread-1が実行されています。 。 。 Pool-1-Thread-5が実行されています。 。 。
(4):NewsCheduledThreadPool
testscheduledthreadpoolexecutor.java
publicClass scheduledthreadpoolexecutor {publicStaticVoid(string [] args){scheduledthreadpoolexecutor exec = new scheduledthreadpoolexecut tor(1);新しいruntimeexception(); out.println( "====================== =========================================================== =========== runna ble(){//システム時間をたまに印刷して、2人が@Override publicVoid run(){system.out.printlnnに影響を与えないことを証明する(system.nanotime());出力結果
=========================================================== =========================================================== =========================================================== =========================================================== =========================================================== =====