Comment décider d'utiliser newCachedThreadPool ou newFixedThreadPool?

Je suis en train de travailler sur un projet dans lequel je dois m'assurer que chaque thread est de travailler sur une gamme donnée. Par exemple:

NO_OF_THREADS: 2
NO_OF_TASKS: 10

Si number of threads is 2 et number of tasks is 10 puis chaque thread sera sur la scène du 10 tasks. Cela signifie donc que 2 fil sera de faire 20 tasks.

En réel scénario de ces chiffres (nombre de tâches et le nombre de threads) sera très élevé que les deux d'entre eux sont configurables dans mon code.

Dans l'exemple ci-dessus, first thread devrait être à l'aide de l'id d'entre 1 and 10 et second thread devrait être à l'aide de l'id d'entre 11 and 20 et ainsi de suite, si d'autres threads. Et après que chaque thread va faire une connexion de base de données et ensuite l'insérer dans la base de données.

Donc, j'ai mon code ci-dessous qui fonctionne bien.

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
        }
    }
}

Ma question:-

J'ai été en passant par plusieurs article sur internet et j'ai lu sur newCachedThreadPool. Alors maintenant, je me demande est - ce que je peux utiliser newFixedThreadPool ou newCachedThreadPool dans mon code? Comme actuellement, je suis en utilisant nexFixedThreadPool. Je ne suis pas en mesure de décider sur quels facteurs dois-je choisir newCachedThreadPool ou newFixedThreadPool. C'est la raison que j'ai posté mon scénario de ce que je vais faire avec mon code.

Quelqu'un peut m'aider que dois-je choisir? Et s'il vous plaît m'expliquer en détails pourquoi nous sommes le choix que sur les facteurs de sorte que je peux comprendre très bien. J'ai déjà passé par java docs, mais pas en mesure de décider de ce que je devrais choisir ici.

Merci pour l'aide.

source d'informationauteur | 2013-02-25