자바 8 병행 프로그래밍

Java 1.5 이전

달성 동시

  • 자바 녹색 스레드

OS 커널 제한, 실 = 공정, 녹색 스레드 JVM이 예약에 의해 스레드 전에 자바 1.2은 멀티 스레드 환경을 네이티브 스레드 지원을 시뮬레이션 없습니다.

  • 자바 기본 스레드

비교
원시 스레드 및 스레드 동기화 측면보다 스레드 활성화 녹색 스레드
는 I / O 성능 및 스레드 컨텍스트의 동작 양태는 로컬보다 낮게

프로그래밍 모델

  • 실행 가능한

제한 사항 (향후 릴리스는 결함이 부분을 개선하기 위해 해결할 수 배울 비교)

  • 스레드 관리에 대한 기본 지원의 부족 (스레드 풀의 부족)
  • "잠금"API (만 동기화 키워드)의 부족
  • 의 완료의 구현을위한 기본 지원의 부족

대체 방법 :


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;
    }
}
  • 결과를 얻기의 어려움
  • 두 번 확인 잠금 불확실성 (싱글)

자바 5

동시성 프레임 워크

  • JUC

프로그래밍 모델

  • 집행자, Execurtors, ExecutorService를 等
  • 실행 가능한, 호출 가능
  • 미래

자바 7

병렬 프레임 워크

  • 포크 / 가입

프로그래밍 모델

  • ForkJoinPool
  • ForkJoinTask
  • RecursiveAction

미래 (자바 5 소개) 제한

  • 손으로 할 수없는
  • 차단 결과가 반환
  • 체인 여러 미래에 없습니다
  • 미래의 결과는 여러 병합 할 수 없습니다
  • 부족 예외 처리

자바 (8)

비동기 프레임 평행

  • 포크 / 가입

프로그래밍 모델

  • CompletionStage
  • CompletableFuture

다른 프레임 워크

  • 봄과 구아바는 다른 사용 ListenableFuture

추천

출처www.cnblogs.com/walkinhalo/p/11125719.html