1. 컨셉
Future는 완료되지 않았을 수 있는 비동기 작업의 결과를 나타내며 작업 실행이 성공하거나 실패한 후 해당 작업을 수행하기 위해 이 결과에 콜백을 추가할 수 있습니다 .
2. 미래 인터페이스
Future 인터페이스는 5개의 주요 인터페이스 메소드를 정의합니다. RunnableFuture 및 ScheduleFuture는 이 인터페이스를 상속하고 CompleteFuture 및 ForkJoinTask는 이 인터페이스를 상속합니다.
3. 예시
패키지 테스트; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; 공개 클래스 CallableFutureTest { 공개 정적 무효 메인(String[] args) { 긴 startTime = System.currentTimeMillis(); Callable<Integer> 계산Callable = 새로운 Callable<Integer>() { @보수 공개 정수 호출()이 예외를 발생시킵니다. { // TODO 자동 생성된 메서드 스텁 Thread.sleep(2000); //시뮬레이션 시간이 많이 소요됨 int result = 1+2; 결과 반환; } }; FutureTask<Integer>calculateFutureTask = new FutureTask<>(calculateCallable); 스레드 t1 = new Thread(calculateFutureTask); t1.start(); //이제 Thread에 가입하여 원격 호출을 시뮬레이션하고 계산 결과에 의존하는 시간 소모적인 서비스(예: 네트워크 계산기)를 실행합니다. 노력하다 { //시간이 많이 걸리는 작업을 시뮬레이션합니다. 메인 스레드는 멀티스레딩의 장점을 반영하여 자체 작업을 수행합니다. Thread.sleep(3000); 정수 a = 3+5; 정수 결과 = 계산FutureTask.get(); System.out.println("result = "+(a+result));//하위 스레드에 의존하는 메인 스레드의 실행 결과를 시뮬레이션합니다. long endTime = System.currentTimeMillis(); System.out.println("time = "+(endTime-startTime)+"ms"); } catch (InterruptedException | ExecutionException e) { // TODO 자동 생성된 캐치 블록 e.printStackTrace(); } } }
위에서 볼 수 있듯이 위에서 소요된 시간은 실제로 메인 스레드 sleep(3000)에 소요된 시간입니다. Future를 사용하지 않고 스레드의 결과에 의존하는 경우 필요한 시간은 5초 (하위 스레드 2초 + 메인 스레드 3초)일 수 있습니다.
위의 내용은 Future가 Java에서 스레드 결과를 얻는 방법입니다. 스레드 처리에 있어 Future가 더 유연하다고 할 수 있습니다. 메커니즘은 대략적으로 하나의 스레드가 실행 중일 때 다른 스레드가 동시에 실행되는 것입니다. 관심이 있으시면 수업 후에 더 많은 내용을 배우실 수 있습니다.