java Future 인터페이스 사용법 상세 정보

java Future 인터페이스 사용법 상세 정보
Java에서 코드가 실행되는 가장 긴 시간, 즉 시간 초과를 설정해야 한다면 Java 스레드 탱크 Executor Service 클래스와 Future 인터페이스를 결합하여 실현할 수 있습니다.Future 인터페이스는 Java 표준 API의 일부입니다.util.concurrent 패키지에 있습니다.Future 인터페이스는 Java 스레드 Future 모드의 구현으로 비동기식 계산을 할 수 있습니다.
Future 모드는 이렇게 설명할 수 있다. 나는 하나의 임무가 있는데 Future에 제출했고 Future가 나를 대신해서 이 임무를 완성했다.그동안 나 혼자 하고 싶은 거 다 할 수 있어.시간이 지나면 Future에서 결과를 추출할 수 있습니다.주문서를 한 장 내린 셈인데, 일정 시간 후에 주문서를 가지고 물건을 인출할 수 있고, 이 기간에 다른 어떤 일을 할 수 있다.그 중에서 Future 인터페이스는 바로 주문서입니다. 진정으로 주문서를 처리하는 것은 Executor류입니다. 이것은 Future 인터페이스의 요구에 따라 제품을 생산합니다.
Future 인터페이스는 작업이 완료되었는지 확인하고, 작업이 완료되면 결과를 얻을 때까지 기다리며, 작업 수행의 시간 초과 시간을 설정할 수 있는 방법을 제공합니다.이 시간 초과 설정 방법은 자바 프로그램의 시간 초과 실행을 실현하는 관건이다.
Future 인터페이스는 일반적인 인터페이스로 엄격한 형식은 Future 이어야 한다. 그 중에서 V는 Future가 수행하는 작업 반환 값의 유형을 대표한다.Future 인터페이스의 방법은 다음과 같습니다.
  • boolean cancel(boolean may Interruptif Running)은 임무의 실행을 취소합니다.매개 변수는 작업 수행을 즉시 중단할지 아니면 작업이 끝날 때까지 기다릴지 지정합니다
  • boolean isCancelled() 작업이 취소되었는지, 작업이 정상적으로 완성되기 전에 취소하면true로 돌아갑니다
  • boolean isDone () 작업이 완료되었는지 확인합니다.주의해야 할 것은 작업이 정상적으로 종료되거나 이상하거나 취소되면true로 되돌아옵니다
  • V get ()throws Interrupted Exception, Execution Exception은 작업 수행이 끝날 때까지 기다린 다음 V 형식의 결과를 얻습니다.Interrupted Exception 루틴이 중단되었습니다. Execution Exception 작업이 비정상적으로 실행되었습니다. 작업이 취소되면 Cancellation Exception을 던집니다
  • V get(long time out, Time Unit unit)throws Interrupted Exception, Execution Exception, Time out Exception은 위의 get 기능과 같이 시간 초과 설정이 많아졌다.매개 변수 timeout은 시간 초과 시간을 지정하고 uint는 시간의 단위를 지정합니다. 열거류 TimeUnit에 관련 정의가 있습니다.시간 초과가 계산되면 TimeoutException 을 내보냅니다.
  • Future의 실현 클래스는java가 있습니다.util.concurrent.FutureTask즉javax입니다.swing.SwingWorker.일반적으로 FutureTask를 사용하여 작업을 처리합니다.FutureTask 클래스는 Runnable 인터페이스를 실현하기 때문에 Executor에 직접 제출할 수 있습니다.FutureTask를 사용하여 시간 초과 실행 코드는 다음과 같습니다.
    
    ExecutorService executor = Executors.newSingleThreadExecutor();  
    FutureTask<String> future =  
        new FutureTask<String>(new Callable<String>() {// Callable   
         public String call() {  
          // , String,   
        }});  
    executor.execute(future);  
    //   
    try {  
      result = future.get(5000, TimeUnit.MILLISECONDS); // , 5 。 future.get(),   
    } catch (InterruptedException e) {  
      futureTask.cancel(true);  
    } catch (ExecutionException e) {  
      futureTask.cancel(true);  
    } catch (TimeoutException e) {  
      futureTask.cancel(true);  
    } finally {  
      executor.shutdown();  
    } 
    
    
    ExecutorService executor = Executors.newSingleThreadExecutor(); 
    FutureTask<String> future = 
        new FutureTask<String>(new Callable<String>() {// Callable  
         public String call() { 
          // , String,  
        }}); 
    executor.execute(future); 
    //  
    try { 
      result = future.get(5000, TimeUnit.MILLISECONDS); // , 5 。 future.get(),  
    } catch (InterruptedException e) { 
      futureTask.cancel(true); 
    } catch (ExecutionException e) { 
      futureTask.cancel(true); 
    } catch (TimeoutException e) { 
      futureTask.cancel(true); 
    } finally { 
      executor.shutdown(); 
    } 
      
    
    Future 객체를 직접 구성하지 않고도 Executor Service를 사용할 수 있습니다.Submit 방법으로 Future 대상을 얻는다. submit 방법은 Callable 인터페이스 유형을 지원하고 Runnable 인터페이스를 매개 변수로 하여 매우 유연성을 가진다.사용 예는 다음과 같습니다.
    
    ExecutorService executor = Executors.newSingleThreadExecutor();  
    FutureTask<String> future = executor.submit(  
      new Callable<String>() {// Callable   
        public String call() {  
       // , String,   
      }});  
    //   
    //  
    
    
    ExecutorService executor = Executors.newSingleThreadExecutor(); 
    FutureTask<String> future = executor.submit( 
      new Callable<String>() {// Callable  
        public String call() { 
       // , String,  
      }}); 
    //  
    //  
    
    Future 인터페이스를 이용하여 프로그램의 실행 시간 초과를 실현하는 데 대체적인 사용법이 이렇게 많기 때문에 다음에 Future 인터페이스의 내부 실현, 특히 실행 시간 초과의 실현을 설정해야 한다.
    읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

    좋은 웹페이지 즐겨찾기