7
votes

Service exécuteur en Java -> Comment convertir un code de filetage unique pour utiliser Executor

Pardonnez-moi si la question sonne stupide - je commence juste à utiliser Executor.

J'ai une application Java existante qui utilise des threads de cette manière-- Utilisé fondamentalement des threads autonomes - P>

    taskThread = spawnThread();

    taskThread.start();


1 commentaires

Enveloppez la section «Run» de votre fil dans une interface exécutable. Créez un exécuteur et offrez-le à celui-ci. Jetez un coup d'œil à travers le Executor Sentier pour plus d'informations


3 Réponses :


9
votes

Dans votre principal, vous pouvez écrire quelque chose comme ceci:

ExecutorService executor = Executors.newFixedThreadPool(nThreads);
executor.submit(new Runnable() {
    String taskSnap = task.toString();
    public void run() {
            try {
                println(task.run(null));
            } catch( InterruptedException e) {
                println("ITC - " + taskSnap + " interrupted ");
            }
    }
});


0 commentaires

5
votes

Faites vos recherches avant de demander. L'idée est de créer une classe qui implémente exécutable et de l'exécuter à l'aide d'un service exécuteur.

Exemple de: Java Concurrence (Multhreading) - Tutoriel P>

Mise en œuvre du travailleur (qui implémente Runnable): strong> p>

package de.vogella.concurrency.threadpools;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
  private static final int NTHREDS = 10;

  public static void main(String[] args) {
    //You can also use Executors.newSingleThreadExecutor() if you just need 1 thread
    ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);
    for (int i = 0; i < 500; i++) {
      Runnable worker = new MyRunnable(10000000L + i);
      executor.execute(worker);
    }
    // This will make the executor accept no new threads
    // and finish all existing threads in the queue.
    executor.shutdown();
    // Wait until all threads are finish
    //while (!executor.isTerminated()) {
    //}
    //System.out.println("Finished all threads");
    //All the threads might not be finished at this point of time. Thread endtime purely depends on the time taken by the processing logic inside your thread.
  }
} 


2 commentaires

Bien sûr, il s'agit simplement d'un exemple de code pour comprendre l'anatomie d'un fil. En vrai code, vous n'attendrez pas inutilement.


Ok, mais je crains de sorte que l'exemple de code sera souvent utilisé comme "parce que ça marche" ...



1
votes

Vous voulez dire quelque chose comme ça? XXX


0 commentaires