Uygulamamda, temel iş parçacığından eşzamansız olarak birden çok iş almalı ve her işin sonucunu toplamalıyım. İş sonuçları toplayan bir ExecutorService ve ExecutorCompletionService kullanarak bunu yapan basit bir Java çözümüm var.Spring CompletionService eşdeğeri?
Şimdi kodumu Spring çözümüne dönüştürmek istiyorum. docs, ExecutorService ve @Async açıklamasının nasıl kullanıldığını gösterir, ancak birden çok işin sonuçlarını nasıl ve ne şekilde toplayabileceğimi bilmiyorum. Başka bir deyişle: CompletionService'nin Spring eşdeğerini arıyorum. Böyle bir şey var mı?
Benim geçerli kod:
Eğer geçerli kod diğer İlkbahar-ilişkili sınıfların yanında iyi çalışır, çünkü asıl amacı ne dikkate almak gerekirclass MyService {
private static ExecutorService executorService;
private static CompletionService<String> taskCompletionService;
// static init block
static {
executorService = Executors.newFixedThreadPool(4);
taskCompletionService = new ExecutorCompletionService<String>(executorService);
// Create thread that keeps looking for results
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Future<String> future = taskCompletionService.take();
String s = future.get();
LOG.debug(s);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
}).start();
}
// This method can and will be called multiple times,
// so multiple jobs are submitted to the completion service
public void solve(List<Long> ids) throws IOException, SolverException {
String data = createSolverData(ids);
taskCompletionService.submit(new SolverRunner(data, properties));
}
}