자바 에서 포크-join 의 원리 해석
이것 이 바로 전체 과정의 운용 이다.그 는 두 개의 하위 클래스 가 있 는데,이 두 개의 하위 클래스 를 사용 하면 모두 우리 의 임무 분배 와 계산 을 실현 할 수 있다.
(1)RecursiveAction 결과 없 는 ForkJointask(반환 값 없 음)
(2)RecursiveTask 결과 가 있 는 ForkJointask(반환 값 이 있 음)
ForkJoinPool:workQueues 대기 열 이 포함 되 어 있 습 니 다.
work Queues:ForkJoinTask 배열 과 workerThread 와 ForkJoinPool 을 가리 키 는 참조 입 니 다.
ForkJoinTask 배열 은 프로그램 이 ForkJoinPool 에 제출 한 작업 을 저장 하고 workerThread 배열 은 이 작업 을 수행 합 니 다.ForkJoinPool 의 인용 은 ForkJoinTask 배열 의 작업 을 처리 한 후에 다시 작업 을 가 져 와 workerThread 에 맡 기기 위해 서 입 니 다.전체 구 조 는 대체적으로 다음 과 같다.
지식 포인트 확장:자바 병렬 포크-Join 프레임 원리 분석
1.Foirk/Join 프레임 워 크 가 무엇 입 니까?
포크/Join 프레임 워 크 는 자바 7 이 병행 작업 을 수행 하 는 프레임 워 크 로 큰 임 무 를 여러 개의 작은 임무 로 나 누 어 최종 적 으로 모든 작은 임무 결 과 를 모 아 큰 임무 결 과 를 얻 는 프레임 워 크 입 니 다.
2.병행 류 와 순서 류 는 무엇 입 니까?2.1 병행 류 는 무엇 입 니까?
병렬 흐름 은 하나의 내용 을 여러 개의 데이터 블록 으로 나 누고 서로 다른 스 레 드 로 각 데이터 블록 의 흐름 을 각각 처리 하 는 것 이다.
2.2 작업 절취 모드
어떤 스 레 드 가 다른 대기 열 에서 임 무 를 훔 쳐 서 수행 합 니 다.
3.포크/Join 프레임 워 크 사용
/**
*
*/
public class ForkJoinCalculate extends RecursiveTask<Long> {
/**
*
*/
private static final long serialVersionUID = 7125244951292834932L;
private long start;//
private long end;//
private static final long THRESHOLD = 10000L;//
@Override
protected Long compute() {
long length = end - start;
if(length <= THRESHOLD) {
long sum = 0L;
for (long i = start; i <= end; i++) {
sum += i;
}
return sum;
}else {
long middle = (start + end) / 2;//
ForkJoinCalculate left = new ForkJoinCalculate(start, middle);// 0-50000000
left.fork();// ,
ForkJoinCalculate right = new ForkJoinCalculate(middle + 1, end);// 50000001-100000000
right.fork();// ,
return left.join() + right.join();//
}
}
public ForkJoinCalculate() {
}
public ForkJoinCalculate(long start, long end) {
this.start = start;
this.end = end;
}
}
4.자바 8 의 병렬 흐름 과 순서 흐름4.1 순차 흐름
/**
* Java8
*/
@Test
public void test3() {
Instant start = Instant.now();// java8 API
LongStream.rangeClosed(0, 10000000000L)
.sequential()//
.reduce(0, Long::sum);
Instant end = Instant.now();
// 5780
System.out.println(" :" + Duration.between(start, end).toMillis());// java8 API
}
4.2 보행 흐름
/**
* Java8
*/
@Test
public void test4() {
Instant start = Instant.now();// java8 API
LongStream.rangeClosed(0, 10000000000L)
.parallel()//
.reduce(0, Long::sum);
Instant end = Instant.now();
// 2392
System.out.println(" :" + Duration.between(start, end).toMillis());// java8 API
}
자바 의 fork-join 원리 해석 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.자바 의 fork-join 원리 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.