호출 인터페이스를 통해 멀티 스레드

A. 호출 인터페이스를 통해 멀티 스레드

다. 구현 호출 가능 호출 메소드를 오버라이드 (override) 
호출 가능을 달성하고 유사한의 Runnable하지만, 더 강력하고, 특정 성능 달성 
을 수행합니다. 작업 종료 후 반환 값을 제공 할 수 있습니다,하지의 Runnable 
예외를 던질 수 있습니다 방법을 b.call,의 Runnable의 run 메소드 아니 
다. 당신은 Fulture 통해 실행 메소드 호출 호출 대상 스레드의 결과를 모니터링 할 수는 호출 가능이 얻을 반환 값을 얻을 ((fulture.get를) 반환 값에 도달 할 때까지 호출을 차단합니다) 오브젝트 없습니다

1.Callable 인터페이스 설명 :

(1) java.util.concurrent.Callable는 일반적인 인터페이스는 하나의 호출 () 방법

(2) () 메서드 호출은 예외 예외 예외가 발생하고 지정된 제네릭 클래스의 객체를 반환

2.Callable 인터페이스 멀티 스레드 애플리케이션 시나리오

(1) 부모 스레드 실행 스레드의 열매를 얻을하려는 경우

단계 3. 호출 가능 인터페이스 멀티 스레드

(1) 제 1 단계 : 객체 호출 가능 서브 클래스의 인스턴스를 생성

(2) 2 단계 : FutureTask 객체 생성자의 FutureTask 전달 호출 가능 객체를 생성

(참고 : FutureTask는 실행 가능한 인터페이스와 미래 인터페이스를 구현)

 (3) 세 번째 단계 : 스레드 개체로서는, 그 목적 생성자 FurureTask 합격

 (4) 네 번째 단계 : 스레드를 시작

실시 예 1 (실 호출 인터페이스를 이용하여)

호출 인터페이스를 사용하여 자식 스레드 클래스를 만듭니다 :

패키지 com.my.frame; 

수입 java.util.concurrent.Callable; 

공공  클래스 ThreadCall는 구현 호출 가능이 <문자열> { 

    @Override 
    공공 문자열 ()에 대한 호출이 발생 예외 {
         // TODO 자동 생성 방법 스텁 
        에서 System.out.println ( "=====을" );
        반환 "9999" ; 
    } 


}
패키지 com.my.frame; 

수입 java.util.concurrent.FutureTask; 

공용  클래스 TestThread {
     공공  정적  무효 메인 (문자열 []에 args) { 
        
        FutureTask <문자열> = 피트 새로운 FutureTask <> ( 새로 ThreadCall ());
        새로운 스레드 (피트) .start (); 
    } 

}

예 2 (익명 클래스 범주는 자식 스레드를 만들 수있는 호출 인터페이스를 구현) :

익명 클래스 범주는 자식 스레드 클래스를 생성하고 구현하는 호출 인터페이스를 구현 :

패키지 호출; 

 

수입 java.util.concurrent.Callable; 

수입 java.util.concurrent.ExecutionException; 

수입 java.util.concurrent.FutureTask; 

// 匿名는类部类实现호출 가능는接口创建子线程

공용  클래스 AnonyCallable { 

 

    공공  정적  무효 메인 (문자열 []에 args) { 

    호출 가능 <문자열> CL =는 새로운 호출 가능 <문자열> () { 

     

    @Override 

    공개 문자열 () 호출이 발생 예외 { 

            에서 System.out.println (.는 Thread.currentThread () getName () + "正在行军~~~" );

            에서 System.out.println (는 Thread.currentThread () getName (). + "만남의 적 ~ ~ ~" ) 

            .에서 System.out.println (는 Thread.currentThread () getName은 () + "용감하게 적을 싸우고 !!!! " ); 

            복귀 "전투 승리 50,000 적을 포착 " ; 

            } 

 

} 

        FutureTask를 . <문자열> 피트 = 새로운 새 FutureTask (CL) 

        새로운 새 . 스레드 (FT"힘에 의해 변형 " ) .start () 

은 try { 

        는 Thread.currentThread () .setName ( "Cunxu 세력" ); 

        (Thread.sleep를 3000 ) 

        에서 System.out.println (.는 Thread.currentThread () getName () + "휴식 3000ms" );

} 캐치(예외 : InterruptedException E) { 

    e.printStackTrace (); 

} 

    에서 System.out.println (는 Thread.currentThread () getName (). + "개편이 ... 친화적 인 메시지 대기, 완료" ) 

은 try { 

            문자열 STR = ft.get ( ) 

            에서 System.out.println는 ( + : "그 메시지 아군 Cunxu" , STR)를 

} 캐치 | (예외 : InterruptedException ExecutionException E) { 

    ; e.printStackTrace ()를 

    } 

} 
}

 

추천

출처www.cnblogs.com/lukelook/p/11128266.html