2011-02-28 7 views
10

저는 C#에서 Java로 옮겨 가고 있으며 비동기 작업 세트를 구현해야합니다.Java의 비동기 작업 패턴

Java 스레딩에 대한 지식이 있지만 .NET의 BeginInvokeEndInvoke 메서드를 사용하면 동기식에서 비동기식 작업으로 쉽게 전환 할 수있어 좋았습니다. 내 경우

, 나는 다음과 같이 (비동기로 변경하기에 적합) I/O 집약적 인 작업의 집합이있는 경우 :

나는 쉽게 같은 것을 할 것 .NET에서
DoOperation1(); 
DoOperation2(); 
DoOperation3(); 

:

BeginInvoke(DoOperation1); 
BeginInvoke(DoOperation2); 
BeginInvoke(DoOperation3); 
EndInvoke(Result1); 
EndInvoke(Result2); 
EndInvoke(Result3); 

간단히 말해, 나의 질문은 : Java에서 비슷한 것이 있습니까? 아니면 수동으로 "오래된 방법"을 사용해야합니까?

감사합니다.

답변

12

. ExecutorService에 작업을 제출하고 을 수신하면 .NET 4 TPL에서 Task<T>과 비슷한 방식으로보기를 요청할 수 있습니다 ... 미래에 차단 방식으로 결과를 요청하거나 제한 시간과 함께 미래를 요청할 수 있습니다. 완료 여부를 묻습니다.

으로 작업하는 것은 메서드 그룹 변환과 람다 식을 통해 C#에서 대리자를 사용하는 것처럼 깔끔하지 않지만 기본적인 아이디어는 비슷합니다.

4

아마도 당신은 실행하려고하는 작업의 구현을 감싸는 Runnable 또는 Callable 클래스와 함께 ExecutorService을 사용하고 싶을 것입니다.

예 : 당신은 아마 자바 선물를 사용하려면

SomeTask someTask1 = ... 
SomeTask someTask2 = ... 

executorService.execute(someTask1); 
executorService.execute(someTask2); 

executorService.shutdown(); //Close down the service