ExecutorService vs ThreadPoolExecutor à l'aide de LinkedBlockingQueue

Je suis en train de travailler sur un multithread projet dans lequel j'ai besoin de générer plusieurs threads à mesure de la fin à la fin de l'exécution de mon code client, car je fais de la Charge et des tests de Performances. J'ai donc créé le code ci-dessous qui est à l'aide de ExecutorService.

Ci-dessous est le code avec ExecutorService:

public class MultithreadingExample {

    public static void main(String[] args) throws InterruptedException {

        ExecutorService executor = Executors.newFixedThreadPool(20);
        for (int i = 0; i < 100; i++) {
            executor.submit(new NewTask());
        }

        executor.shutdown();
        executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
    }
}

class NewTask implements Runnable {

    @Override
    public void run() {
        //Measure the end to end latency of my client code
    }   
}

Énoncé du problème:

Maintenant, j'ai lu quelques article sur Internet. J'ai découvert il y a ThreadPoolExecutor ainsi. Donc, je n'ai pas compris qui je doit utiliser.

Si je remplace mon code ci-dessus à partir de:

ExecutorService executor = Executors.newFixedThreadPool(20);
    for (int i = 0; i < 100; i++) {
        executor.submit(new NewTask());
    }

à:

BlockingQueue<Runnable> threadPool = new LinkedBlockingQueue<Runnable>();

ThreadPoolExecutor tpExecutor = new ThreadPoolExecutor(20, 2000, 0L, TimeUnit.MILLISECONDS, threadPool);

tpExecutor.prestartAllCoreThreads();

    for (int i = 0; i < 100; i++) {
        tpExecutor.execute(new NewTask());
    }

cela fera toute la différence? Je suis en train d'essayer de comprendre quelle est la différence entre mon code d'origine à l'aide de ExecutorService et le nouveau code collé à l'aide de ThreadPoolExecutor. Certains de mes coéquipiers, a déclaré seconde (ThreadPoolExecutor) est la bonne façon de l'utiliser.

Quelqu'un peut-il préciser ce pour moi?

InformationsquelleAutor | 2013-04-23