Ok, quindi so che la prima risposta/commento qui sarà "usa uno ExecutorService
e usa invokeAll
". Tuttavia, c'è una buona ragione (che non annoierò alle persone) per noi mantenendo separati i pool di thread.Come attendere la lista di `Future`s creati usando diversi` ExecutorServices`
quindi ho un elenco di pool di thread (ExecutorServices
) e quello che devo fare è invocare un diverso Callable
su ogni pool di thread utilizzando submit
(nessun problema). Ora ho questa raccolta di istanze Future
, ognuna creata su un ExecutorService
separato, e desidero attendere che tutte siano completate (ed essere in grado di fornire un timeout in cui le eventuali non eseguite vengono annullate).
Esiste una classe esistente che eseguirà questa operazione (racchiudere un elenco di istanze di Future
e attendere fino a quando non saranno state completate tutte)? In caso contrario, i suggerimenti su un meccanismo efficiente sarebbero apprezzati.
Stavo pensando di chiamare get
con un timeout per ciascuno, ma devo fare un calcolo del tempo totale passato per ogni chiamata.
Ho visto questo post Wait Until Any of Future is Done ma questo estende Future
invece di avvolgerne un elenco.
per ogni elenco e quando l'ultimo è fatto è fatto - come si dice –
Post aggiornato per chiarire che il timeout è la cosa che è il problema e spero di non reinventare la ruota in tal senso. –
beh se leggete quei documenti java di Nifty lil vedrete che è possibile attendere la scadenza e impostare il timeout, quindi quando si inviano le attività è possibile inviare un arresto e se l'attività non si completa nel tempo, si spegne dopo il timeout wabamzorz! !!! –