logo

Java 미래 예

~ 안에 자바 , 미래 이다 상호 작용 에 속하는 java.util.concurrent 패키지 . 비동기 계산의 결과를 나타내는 데 사용됩니다. 인터페이스는 계산이 완료되었는지 확인하고, 완료될 때까지 기다리며, 계산 결과를 가져오는 메소드를 제공합니다. 작업이나 계산이 완료되면 계산을 취소할 수 없습니다.

통사론:

 public interface Future 

Java Future의 예

Java Future의 가장 좋은 예는 다음과 같습니다. 실행자 서비스 상호 작용. 하나 이상의 비동기 작업의 진행 상황을 추적하기 위해 Future(일부 메서드에서) 개체를 생성합니다.

미래 인터페이스의 방법

인터페이스는 다음과 같은 5가지 방법을 제공합니다.

방법 설명
취소() 작업 실행을 취소하려고 합니다.
얻다() 필요한 경우 메서드는 계산이 완료될 때까지 기다린 다음 결과를 검색합니다.
얻다() 필요한 경우 최대 주어진 시간 동안 계산이 완료될 때까지 기다린 다음 가능한 경우 결과를 검색합니다.
취소됨() 작업이 완료되기 전에 취소된 경우 true를 반환합니다.
수행() 작업이 완료되면 true를 반환합니다.

Future 인터페이스에는 다음과 같은 몇 가지 단점이 있었습니다.

  • Future를 사용하면 계산을 수동으로 완료할 수 없습니다.
  • 정류가 완료된 후에는 알림을 보내지 않습니다.
  • 체인을 생성하거나 결합할 수 없습니다.

위의 한계를 극복하기 위해, 자바 8 소개 완성 가능한 미래 .

비동기 프로그래밍에서 Future 사용

결과 얻기

위에서 논의한 것처럼 Future는 비동기 작업의 결과를 나타냅니다. 해당 비동기 작업의 결과를 검색하기 위해 Java Future 인터페이스는 객체를 반환하는 다음 두 가지 get() 메서드 버전을 제공합니다. 반환 유형은 일반 유형일 수 있습니다. 예를 들어:

 Future future = ... // get Future by starting async task // do something else, until ready to check result via Future // get result from Future try { Object result = future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } 

참고: 비동기 작업이 완료되기 전에 get() 메서드를 호출하려고 하면 결과가 준비될 때까지 get() 메서드가 차단됩니다.

위의 단점을 극복하기 위해 Future 인터페이스는 많은 양의 get() 메소드를 제외하고 다른 버전의 get() 메소드를 제공합니다. 시간 (밀리초 단위)을 매개변수로 사용합니다. 이는 미래에서 결과가 나온 후 작업이 완료될 때까지 일정 시간 동안 기다릴 것임을 나타냅니다. 예를 들어:

알파벳 숫자
 try { Object result = future.get(1000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { } catch (ExecutionException e) { } catch (TimeoutException e) { // thrown if timeout time interval passes // before a result is available. } 

Future가 지정된 시간 내에 결과를 얻지 못하면 시간 초과 예외 미래에 의해 던져졌습니다.

비동기 작업 취소

또한 다음을 호출하여 언제든지 비동기 작업을 취소할 수도 있습니다. 취소() Future 인터페이스의 메소드. 예를 들어:

 Future future = ... // Get Future from somewhere future.cancel(); 

비동기 작업이 완료되었는지 확인

인터페이스는 메소드를 제공합니다 수행() 비동기 작업이 완료되었는지 확인합니다. 예를 들어:

 Future future = ... // Get Future from somewhere if(future.isDone()) { Object result = future.get(); } else { // do something else } 

비동기 작업이 취소되었는지 확인

Future 인터페이스는 메소드를 제공합니다 취소됨() Future가 나타내는 비동기 작업이 취소되었는지 확인합니다. 작업이 성공적으로 취소되면 true를 반환하고 그렇지 않으면 false를 반환합니다. 예를 들어:

 Future future = ... // get Future from somewhere if(future.isCancelled()) { } else { } 

Java Future의 예

FutureExample.java

 import java.util.concurrent.*; public class FutureExample { public static void main(String args[]) throws InterruptedException, ExecutionException { //ExecutorService allows us to execute tasks on threads asynchronously ExecutorService es = Executors.newSingleThreadExecutor(); //getting future //the method submit() submits a value-returning task for execution and returns the Future Future future = es.submit(() -> { //sleep thread for 2 seconds Thread.sleep(2000); return 'Welcome to Javatpoint'; }); //checks if the task is completed or not while(!future.isDone()) { System.out.println('The task is still in process.....'); //sleep thread for 2 milliseconds Thread.sleep(200); } System.out.println('Task completed! getting the result'); //getting the result after completing the task String result = future.get(); //prints the result System.out.println(result); es.shutdown(); } } 

산출:

Java 미래 예