호출 가능 및 향후 인터페이스
Callable은 Runnable과 유사한 인터페이스입니다.
호출 가능과 달리기에는 몇 가지 차이점이 있습니다.
(1) Callable에 의해 지정된 메소드는 Call ()이며 Runnable에 의해 지정된 메소드는 run ()입니다.
(2) 호출 가능한 작업은 실행 된 후 값을 반환 할 수 있지만, 런닝 가능한 작업은 값을 반환 할 수 없습니다.
(3) Call () 메소드는 예외를 던질 수 있지만 run () 메소드는 예외를 던질 수 없습니다.
(4) 호출 가능한 작업을 실행하면 미래의 객체를 얻을 수 있습니다.
계산이 완료되었는지 확인하고 계산이 완료 될 때까지 대기하고 계산 결과를 검색하는 방법을 제공합니다.
미래의 객체를 통해 작업 실행 상태를 이해하고 작업 실행을 취소하고 작업 실행 결과를 얻을 수 있습니다.
코드 사본은 다음과 같습니다.
패키지 com.yao;
java.util.concurrent.callable import;
import java.util.concurrent.executorservice;
java.util.concurrent.executors import;
java.util.concurrent.future import;
공개 클래스 CallableAndFuture {
/**
* 호출 가능한 인터페이스를 구현하려면 작업 클래스를 사용자 정의합니다.
*/
공개 정적 클래스 MyCallableClass는 호출 가능 {
// 로고 위치
개인 int 플래그 = 0;
public mycallableclass (int flag) {
this.flag = 플래그;
}
public string call ()는 예외를 던져 {
if (this.flag == 0) {
// 플래그 값이 0이면 즉시 반환
"flag = 0"을 반환합니다.
}
if (this.flag == 1) {
// 플래그 값이 1 인 경우 무한 루프를 수행하십시오.
노력하다 {
while (true) {
System.out.println ( "루핑 ...");
Thread.sleep (2000);
}
} catch (InterruptedException e) {
System.out.println ( "인터럽트");
}
"거짓"을 반환합니다.
} 또 다른 {
// 거짓이 0 또는 1이 아닌 경우 예외가 발생합니다.
새로운 예외를 던지십시오 ( "나쁜 깃발 값!");
}
}
}
public static void main (String [] args) {
// 3 개의 호출 가능한 유형 작업을 정의합니다
MyCallableClass task1 = New MyCallableClass (0);
MyCallableClass task2 = New MyCallableClass (1);
MyCallableClass Task3 = New MyCallableClass (2);
// 작업을 수행하는 서비스를 만듭니다
ExecutorService es = executors.newfixedthreadpool (3);
노력하다 {
// 작업이 시작되면 미래의 객체가 반환됩니다.
// 작업 실행 또는 예외 결과를 얻으려면이 미래 객체에서 작동 할 수 있습니다.
미래 미래 1 = es.submit (task1);
// GET 메소드가 호출되면 현재 스레드가 실행되기 전에 대기합니다.
System.out.println ( "task1 :" + future1.get ());
미래의 미래 2 = es.submit (task2);
// 두 번째 작업을 중지하기 전에 5 초 동안 기다립니다. 두 번째 작업은 무한 루프이기 때문입니다
Thread.sleep (5000);
System.out.println ( "task2 cancel :" + future2.cancel (true));
// 세 번째 작업을 실행하면 예외가 발생하므로 세 번째 작업의 출력을 얻습니다.
// 다음 진술은 예외가 발생하게됩니다.
미래 미래 3 = es.submit (task3);
System.out.println ( "task3 :" + future3.get ());
} catch (예외 e) {
System.out.println (e.toString ());
}
// 작업 실행 서비스를 중지합니다
es.shutdownnow ();
}
}