오늘 공부한 내용 ✍🏻
- 자바의신 31장
Fork/Join : 여러 개로 나누어 계산한 후 결과를 모으는 작업
Fork/Join 작업 기본 수행 개념
보통 회귀적으로 사용된다
if(작업의 단위가 충분히 작을 경우){
해당 작업 수행
}else{
작업을 반으로 쪼개어 두 개의 작업으로 나눔
두 작업을 동시에 실행시키고, 두 작업이 끝날 때까지 결과를 기다림
}
public abstract class ResursiveAction extends ForkJoinTask<Void>
public abstract class RecursiveTask<V> extends ForkJoinTask<V>
public abstract class ForkJoinTask<V> extends Object
implements Future<V>, Serializable
public class GetSum extends RecursiveTask<Long>{
long from, to;
public GetSum(long from, long to){
this.from = from;
this.to = to;
}
public Long compute(){
long gap = to-from;
if(gap<=3){
long tempSum = 0;
for(long loop = from; loop<=to ; loop++){
tempSum = loop;
}
return tempSum;
}
long middel = (from+to)/2;
GetSum sumPre = new GetSum(from, middle);
// 작업 수행
sumPre.fork();
GetSum sumPost = new GetSum(middle+1, to);
return sumPost.compute()+sumPre.join();
}
}
public class ForkJoinSample {
static final ForkJoinPool mainPool = new ForkJoinPool();
public static void main(String args[]){
ForkJoinSample sample = new ForkJoinSample();
sample.calculate();
}
public void calculate(){
long from = 0;
long to = 10;
GetSum sum = new GetSum(from, to);
// 계산을 수행하는 객체를 넘겨주면 작업 시작
Long result = mainPool.invoke(sum);
System.out.prinln("Fork Join:Total sum of " +
from + "~)+to+"="+result);
}
}