1. 설명과 이야기
멀티 스레딩에서 프로그래밍 할 때. 필요에 직면 할 수 있습니다. 즉, 열린 스레드가 열리면 각 스레드에서 반환 된 데이터를 동시에 얻은 다음 통합 처리를 수행하고 싶습니다. 이 요구 사항에 따라 미래와 호출 가능의 조합은 크게 사용됩니다.
어떤 사람들은 또한 동기화를 사용 하여이 요구 사항을 완료 할 수 있다고 말할 수도 있지만 실제로는 일반적인 경우 가능합니다. 그러나 특별한 경우에는 효과가 없습니다.
여러 스레드가 일부 데이터를 동기로 계산할 수있게되었다고 상상해보십시오. 그러나 모든 사람은 스레드가 리소스와 경쟁 할 것이라는 것을 알고 있습니다. 여러 스레드를 활성화하여 데이터 계산을 동기화 할 때. 실제로, 스레드 사이의 계산 순서는 무효 일 수 없습니다. 물론 큰 실수를하지 않으면 처리하는 것은 불가능하지 않습니다. 그러한 경우. 미래와 호출 가능의 조합이 최선의 선택입니다.
2. 샘플 예제
이 두 범주의 예는 실제로는 실제로 사용 가능한 사용을 찾을 수 있는지에 따라 매우 쉽습니다. 코드 :
패키지 테스트; import java.util.concurrent.callable; import java.util.concurrent.executionException; import java.util.concurrent.executorservice; import java.util.concurrent.executors; import java.util.concurrent.future; 공개 클래스 FeatureCallableTest {private static executorService service = executors.newfixedthreadpool (100); 개인 정적 int count = 1; public static void main (String [] args)은 InterruptedException, executionException {int sum = 0; for (int i = 0; i <100; i ++) {future <integer> future = service.submit (new Callable <integer> () {@override public integer call ()는 예외 {system.out.println (thread.currentthread (). getName ()); return ++ count;}}; int f = future.get (); 합계 += f; System.out.println ( "미래는" + f); } system.out.println ( "sum is" + sum); service.shutdownnow (); }}