2011-02-28 30 views
10

C# 'dan Java'ya geçiyorum ve bir dizi eşzamansız görevi yerine getirmem gerekiyor.Java'da eşzamansız görev kalıbı

Java iş parçacığı hakkında iyi bir bilgim var, ancak .NET'in BeginInvoke ve EndInvoke yöntemlerini beğendim çünkü zaman uyumsuz görevlerden kolayca geçiş yapmamıza izin verdiler. Benim durumumda

, aşağıdaki gibi (zaman uyumsuz değişen uygun) G/Ç yoğun operasyonların bir dizi varsa:

Kolayca böyle bir şey yapsın .NET
DoOperation1(); 
DoOperation2(); 
DoOperation3(); 

:

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

Kısaca, sorum şu: Java'da benzer bir şey var mı, yoksa iplikleri elle "eski yol" olarak mı kullanmalıyım?

Teşekkür ederiz.

cevap

12

. ExecutorService'a bir görev gönderirseniz ve Task<T>'un .NET 4 TPL ... 'den benzer bir şekilde sormasını sağlayabileceğiniz bir Future<T> geri alırsınız. Bir sonucu gelecekteki bir engelleme şeklinde veya bir zaman aşımıyla sorabilirsiniz.

Callable<T> ile çalışma, C# yöntem yöntemiyle dönüşümler ve lambda ifadeleri kullanılarak temsilciler kadar düzgün değil, ancak temel fikirler benzerdir.

4

Büyük olasılıkla, çalışmaya çalıştığınız işlerin uygulanmasını tamamlayan Runnable veya Callable sınıflarının yanı sıra ExecutorService'u kullanmak isteyebilirsiniz.

Bir örnek: Muhtemelen Java geleceği kullanmak istediğiniz

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

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

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