Java同時プログラミング-Exectorフレームワーク
1、Exectorフレームワーク:非同期タスク実行フレーム。ライフサイクルのサポートや統計情報収集、アプリケーション管理、性能監視などの仕組みが提供されています。
・生産者ベースの消費者モデル。
・タスクの提出過程をタスク実行プロセスと切り離し、Runnableでタスクを表します。
2、スレッド池
・newFixedThreadPool:固定長のスレッド池を作成します。
・newCachedThreadPool:キャッシュできるスレッド池を作成します。
・newSingleThreadPool:単一スレッドのスレッド池であり、タスクがキューにある順に「FIFO,LIFO,優先度」などをシリアルで実行します。
・newScheduledThreadPool:固定長のスレッド池を作成し、タイミングまたは遅延でタスクを実行します。
3、Exectorライフサイクル
・ExectorServiceのライフサイクルは3つの状態があります。運行、クローズ、終了しました。
・ExectorServiceの作成時は運転状態となります。
・shutdown方法は、新たなタスクを受け付けずに、提出されたタスクの実行が完了するまで待ちます。まだ実行されていないタスクを保護します。
4、Exector類はスレッド池の機能のみを提供しており、ライフサイクル監視の機能を提供していません。
ExectorService類はスレッド池のみならず、ライフサイクル監視などの機能を備えています。
5、Exector.execute(Runnable command)
Futurefuture=ExectorService.submit(Callabletask)
List<Future<T>list=Exect Service.invokeAll(Collection<Callable<T>taskys、timeout、unit)
6、適用:
・生産者ベースの消費者モデル。
・タスクの提出過程をタスク実行プロセスと切り離し、Runnableでタスクを表します。
2、スレッド池
・newFixedThreadPool:固定長のスレッド池を作成します。
・newCachedThreadPool:キャッシュできるスレッド池を作成します。
・newSingleThreadPool:単一スレッドのスレッド池であり、タスクがキューにある順に「FIFO,LIFO,優先度」などをシリアルで実行します。
・newScheduledThreadPool:固定長のスレッド池を作成し、タイミングまたは遅延でタスクを実行します。
3、Exectorライフサイクル
・ExectorServiceのライフサイクルは3つの状態があります。運行、クローズ、終了しました。
・ExectorServiceの作成時は運転状態となります。
・shutdown方法は、新たなタスクを受け付けずに、提出されたタスクの実行が完了するまで待ちます。まだ実行されていないタスクを保護します。
4、Exector類はスレッド池の機能のみを提供しており、ライフサイクル監視の機能を提供していません。
ExectorService類はスレッド池のみならず、ライフサイクル監視などの機能を備えています。
5、Exector.execute(Runnable command)
Future
List<Future<T>list=Exect Service.invokeAll(Collection<Callable<T>taskys、timeout、unit)
6、適用:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class TaskExecution {
private static final ExecutorService exec = Executors.newFixedThreadPool(4);
public static void main(String[] args) {
Callable<String> task = new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "success";
}
};
Future<String> future= exec.submit(task);
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
System.out.println("isTerminate = "+exec.isTerminated());
try {
System.out.println("future.get = "+future.get(800,TimeUnit.NANOSECONDS));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
exec.shutdown();
} catch (ExecutionException e) {
e.printStackTrace();
exec.shutdown();
} catch (TimeoutException e) {
e.printStackTrace();
future.cancel(true);
exec.shutdown();
}
System.out.println("------------");
}
}