Javaの8並行プログラミング

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

おすすめ

転載: www.cnblogs.com/walkinhalo/p/11125719.html