2011-02-28 25 views
10

Paso de C# a Java y necesito implementar un conjunto de tareas asincrónicas.Patrón de tareas asíncronas en Java

Tengo un buen conocimiento de enhebrado de Java, pero me gustaron los métodos BeginInvoke y EndInvoke de .NET porque me permitieron pasar de tareas sincrónicas a asíncronas con facilidad.

En mi caso, si tengo un conjunto de operaciones de E/S intensiva (adecuado para cambiar a asíncrono) como el siguiente:

DoOperation1(); 
DoOperation2(); 
DoOperation3(); 

en .NET que haría fácilmente algo como:

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

En pocas palabras, mi pregunta es: ¿hay algo similar en Java, o tengo que usar los hilos manualmente "a la antigua"?

Gracias.

Respuesta

12

Es posible que desee utilizar los futuros en Java. Envíe una tarea a ExecutorService y reciba un Future<T> de vuelta que puede solicitar ver de manera similar al Task<T> desde .NET 4 TPL ... puede solicitar un resultado de bloqueo de futuro, o con un tiempo de espera, pregunte si está hecho, etc.

Trabajar con Callable<T> no es tan limpio como usar delegados en C# a través de conversiones de grupos de métodos y expresiones lambda, pero las ideas básicas son similares.

4

Creo que probablemente desee utilizar ExecutorService junto con las clases ejecutables o invocables que envuelven la implementación de los trabajos que intenta ejecutar.

Un ejemplo:

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

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

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