Java 1.5前
達成同時
- Javaのグリーンスレッド
OSカーネルの制限、スレッド=プロセス、グリーンスレッドJVMが予定されていることにより、スレッドの前のJava 1.2は、マルチスレッド環境にネイティブでスレッドのサポートをシミュレートすることがありません。
- Javaネイティブスレッド
比較
ネイティブスレッドおよびスレッド同期の側面よりスレッド活性化におけるグリーンスレッド
I / O性能とスレッドのコンテキストの動作態様は、ローカルよりも低いです
プログラミングモデル
- 糸
- Runnableを
制限事項(将来のリリースでは、学ぶに匹敵する、欠陥のこの部分を改善するために解決されます)
- スレッド管理のためのネイティブサポートの欠如(スレッドプールの欠如)
- 「ロック」API(のみsynchronizedキーワード)の欠如
- の完成を実現するためのネイティブサポートの欠如
代替方法:
public static void main(String[] args){
CompletableRunnable runnable = new CompletableRunnable();
Thread thread = new Thread(runnable,"Sub");
thread.start();
thread.join(); //此处阻塞主线程等待Sub完成, 否则得到的结果不准确
System.out.printf("[Thread: %s] is running\n", Thread.currentThread.getName());
System.out.printf("Sub Thread is completed, result is %s\n", runnable.getCompleted());
}
private static class CompletableRunnable implements Runnable{
private volatile boolean completed = false;
@Override
public void run(){
System.out.printf("[Thread: %s] is running\n", Thread.currentThread.getName());
completed = true;
}
public boolean getCompleted(){
return completed;
}
}
- 結果を得ることの難しさ
- ダブルチェックロックの不確実性(シングルトン)
Java 5の
並行処理フレームワーク
- JUC
プログラミングモデル
- エグゼキュータ、Execurtors、ExecutorServiceの等
- Runnableを、呼び出し可能
- 未来
Javaの7
パラレルフレームワーク
- フォーク/参加
プログラミングモデル
- ForkJoinPool
- ForkJoinTask
- RecursiveAction
フューチャー(Java 5の導入)の限界
- 手で行うことはできません。
- ブロッキングの結果が返されます
- チェーン複数の将来にできません。
- 将来の結果は、複数のマージすることはできません
- 不足の例外処理
Javaの8
非同期並列フレーム
- フォーク/参加
プログラミングモデル
- CompletionStage
- CompletableFuture
他のフレームワーク
- 春とグアバは異なる使用します
ListenableFuture