Sto lavorando a un progetto in cui è necessario verificare che ogni thread funzioni su un determinato intervallo. Ad esempio:Come decidere se utilizzare newCachedThreadPool o newFixedThreadPool?
NO_OF_THREADS: 2
NO_OF_TASKS: 10
Se number of threads is 2
e number of tasks is 10
poi ciascun filo si esibirà 10 tasks
. Ciò significa che 2 thread eseguiranno 20 tasks
.
Nello scenario attuale questi numeri (numero di attività e numero di thread) saranno molto alti in quanto entrambi sono configurabili nel mio codice.
Nell'esempio precedente, first thread
dovrebbe usare id tra 1 and 10
e second thread
dovrebbe usare id tra 11 and 20
ecc se qualsiasi più fili. E dopo che ogni thread farà una connessione al database e quindi inserirà nel database.
Quindi ho il mio codice qui sotto che funziona bene.
public static void main(String[] args) {
final int noOfThreads = 2;
final int noOfTasks = 10;
//create thread pool with given size
ExecutorService service = Executors.newFixedThreadPool(noOfThreads);
// queue some tasks
for (int i = 0, int nextId = 1; i < noOfThreads; i++, nextId += noOfTasks) {
service.submit(new ThreadTask(nextId, noOfTasks));
}
}
class ThreadTask implements Runnable {
private final int id;
private int noOfTasks;
public ThreadTask(int nextId, int noOfTasks) {
this.id = nextId;
this.noOfTasks = noOfTasks;
}
public void run() {
//make a database connection
for (int i = id; i < id + noOfTasks; i++) {
//insert into database
}
}
}
La mia domanda: -
stavo attraversando vari articolo su internet e ho letto su newCachedThreadPool
. Così ora mi chiedo è - Dovrei usare newFixedThreadPool
o newCachedThreadPool
nel mio codice? Come al momento sto usando nexFixedThreadPool
. Non sono in grado di decidere su quali fattori scegliere newCachedThreadPool
o newFixedThreadPool
. Questa è la ragione per cui ho postato il mio scenario su ciò che sto per fare con il mio codice.
Qualcuno può darmi una mano che cosa dovrei scegliere qui? E per favore spiegami in dettaglio perché lo stiamo scegliendo su quali fattori in modo che io possa capirlo molto bene. Ho già utilizzato i documenti java ma non sono in grado di decidere cosa scegliere qui.
Grazie per l'aiuto.
Grazie grigio per il suggerimento. Ma quel numero di thread e il numero di attività sono configurabili nel mio codice. Ciò significa che posso eseguire lo stesso programma con 100 thread e 10000 numero di attività o qualsiasi altro numero. Quindi cosa dovrei usare in quel caso? –
Ogni volta che si invia un lavoro al pool, si desidera che venga avviato immediatamente? Se questo è vero, dovresti usare un 'newCachedThreadPool()'. Se, invece, si desidera limitare la quantità di concorrenza in corso per massimizzare le prestazioni della propria casella, è necessario eseguire una dimensione di pool fissa @FarhanJamal. – Gray