포크-조인 프레임 워 크
포크 와 Join 은 자바 1.7 이 제공 하 는 정형 집행 에 사용 되 는 프레임 워 크 로 큰 임 무 를 여러 개의 작은 임무 로 나 누 어 수행 하고 작은 임무 수행 결 과 를 큰 임무 의 프레임 워 크 로 모 았 다.말 그대로 포크 가 큰 임 무 를 여러 개의 작은 임무 로 나 누 는 것 이다.Join 은 작은 임 무 를 합 쳐 큰 임 무 를 얻 는 것 이다.작업 절취 알고리즘 을 사용 하 다.
작업 절취 알고리즘
다른 스 레 드 에서 작업 임 무 를 가 져 오 는 알고리즘작업 절취 알고리즘 을 사용 하면 우리 가 큰 임 무 를 여러 개의 작은 임무 로 나 누 는 데 편리 할 수 있다.스 레 드 간 의 경쟁 을 줄 이기 위해 서 우 리 는 모든 임 무 를 각각 다른 대기 열 에 넣 고 스 레 드 와 대기 열 이 일일이 대응 하지만 일부 스 레 드 는 먼저 임 무 를 완성 합 니 다.이것 은 자신의 임 무 를 완성 한 스 레 드 가 다른 스 레 드 를 도와 임 무 를 수행 하 는 것 입 니 다.이것 은 그들 이 같은 대기 열 에 방문 하 는 것 입 니 다.스 레 드 를 훔 치 는 것 과 스 레 드 를 훔 치지 않 는 경쟁 을 줄 이기 위해 서 우 리 는 보통 쌍 단 대기 열 을 사용한다.도 둑 맞 은 스 레 드 는 양 끝 대기 열의 머리 에서 작업 을 영원히 가 져 옵 니 다.스 레 드 는 양 끝 대기 열의 끝 에서 내용 을 영원히 가 져 옵 니 다.
장점:라인 을 충분히 이용 하여 병행 계산 을 하여 라인 간 의 경쟁 을 줄 이 는 것 이다.단점 은 경쟁 이 존재 하 는 것 이다.예 를 들 어 대기 열 에 하나의 작업 만 있 을 때 더 많은 시스템 자원 을 소모 하여 더 많은 스 레 드 를 만 드 는 것 이다.
제한:
4.567917.검사 이상 을 던 져 서 는 안 되 고 필요 한 코드 를 사용 하여 그들 을 검사 해 야 한다
데모 코드
@Slf4j
public class ForkJoinTaskExample extends RecursiveTask {
public static final int threshold = 2;
private int start;
private int end;
public ForkJoinTaskExample(int start, int end) {
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
int sum = 0;
//
boolean canCompute = (end - start) <= threshold;
if (canCompute) {
for (int i = start; i <= end; i++) {
sum += i;
}
} else {
// ,
int middle = (start + end) / 2;
ForkJoinTaskExample leftTask = new ForkJoinTaskExample(start, middle);
ForkJoinTaskExample rightTask = new ForkJoinTaskExample(middle + 1, end);
//
leftTask.fork();
rightTask.fork();
//
int leftResult = leftTask.join();
int rightResult = rightTask.join();
//
sum = leftResult + rightResult;
}
return sum;
}
public static void main(String[] args) {
ForkJoinPool forkjoinPool = new ForkJoinPool();
// , 1+2+3+4
ForkJoinTaskExample task = new ForkJoinTaskExample(1, 100);
//
Future result = forkjoinPool.submit(task);
try {
log.info("result:{}", result.get());
} catch (Exception e) {
log.error("exception", e);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java. util. concurrent 패키지 의 해체@Date 2019-7-8 11:25*/public class BlockingQueueExample {public static void main(String[] args) {BlockingQueue blockingQ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.