Giriş
Bu sınıfın ExecutorService'ten farkı basitçe şöyle düşünülebilir.
ExecutorCompletionService dışarıdan verilen bir ExecutorService kullanır.
Örnek
Şöyle yaparız
Şöyle yaparız.
take() metodu gibi bitmiş işi döndürür. Eğe bitmiş iş yoksa null döndürür.
Şöyle yaparız.
Şöyle yaparız.
ExecutorCompletionService'e bir dizi iş verilirse, tüm işlerin bitmesini beklemek gerekmez. Biten işler take() metodu ile alınabilir. Eğer bitmiş iş yoksa bloke olur.
Örnek
Şöyle yaparız
Şöyle yaparız.
Bu sınıfın ExecutorService'ten farkı basitçe şöyle düşünülebilir.
Açıklaması şöyle. İşler submit() metodu ile verildikten sonra bittikçe poll() veya take() metodu ile alınır.
- ExecutorService = incoming queue + worker threads
- CompletionService = incoming queue + worker threads + output queue
you submit tasks to this, and it gives you them back in order of completion.constructor - ExecutorService
ExecutorCompletionService dışarıdan verilen bir ExecutorService kullanır.
Örnek
Şöyle yaparız
ThreadPoolExecutor executor = new ThreadPoolExecutor = ...;
ExecutorCompletionService service = new ExecutorCompletionService(executor);
ÖrnekŞöyle yaparız.
ExecutorService pool = Executors.newFixedThreadPool(5);
ExecutorCompletionService<String> service = new ExecutorCompletionService<>
(pool);
poll metodutake() metodu gibi bitmiş işi döndürür. Eğe bitmiş iş yoksa null döndürür.
Şöyle yaparız.
completionService.poll(100,TimeUnit.MILLISECONDS);
submit metoduŞöyle yaparız.
Runnable r = ...;
completionService.submit(r);
take metoduExecutorCompletionService'e bir dizi iş verilirse, tüm işlerin bitmesini beklemek gerekmez. Biten işler take() metodu ile alınabilir. Eğer bitmiş iş yoksa bloke olur.
Örnek
Şöyle yaparız
ExecutorService service = Executors.newFixedThreadPool(1);
ExecutorCompletionService<Integer> comp = new ExecutorCompletionService<>(service);
comp.submit(task);
// ... I assume you want to submit N tasks.
for (int i = 0; i < N; ++i) {
Future<Integer> future = comp.take();
Integer result = future.get();
// ... do something with the result ...
}
ÖrnekŞöyle yaparız.
ExecutorService pool = Executors.newFixedThreadPool(2);
CompletionService<String> service = new ExecutorCompletionService<String>(pool);
final List<? extends Callable<String>> callables = Arrays.asList(
new SleepingCallable("slow", 5000),
new SleepingCallable("quick", 500));
for (final Callable<String> callable : callables) {
service.submit(callable);
}
pool.shutdown();
try {
while (!pool.isTerminated()) {
final Future<String> future = service.take();
System.out.println(future.get());
}
} catch (ExecutionException | InterruptedException ex) { }
Hiç yorum yok:
Yorum Gönder