Question

Je suis en train d'écrire un générateur de table arc-en en Java et le temps est venu de mettre en œuvre multi-threading pour augmenter la vitesse globale du processus.

Jusqu'à présent, j'ai une interface graphique qui appelle une classe SwingWorker qui gère la construction des tableaux et de la population avec des données.

Dans le SwingWorker est un Runnable:

private final Runnable populateTable = new Runnable() { //Generate & write to file};

Pour appeler populateTable je me suis mis en œuvre un ExecutorService avec un FixedThreadPool constitué de quatre fils pour faire la génération et l'écriture sur le disque, la méthode run () est également synchronisé:

ExecutorService executor = Executors.newFixedThreadPool(4);

Ceci est le point où je deviens un peu confus, et montrer mon ignorance en matière de multi-threading.

Chaque exécution populateTable () effectue des opérations 2000, avant de finalement écrire quelque chose dans un fichier.

besoins populateTable à exécuter 40000000 afin de générer une assez grande table arc-en-pour moi d'utiliser.

Quel serait le meilleur (et bien sûr efficace) manière d'exécuter une opération de temps 2000, 40 millions de fois en utilisant les quatre fils?

J'espère que le bon sens, et des conseils ou des commentaires seraient grandement appréciés.

Merci

Josh

Était-ce utile?

La solution

Exécuter quelque chose sur un threadpool 40 millions de fois est peu susceptible d'être efficace. Au lieu de cela, il faut diviser le travail en 4 parties et exécuter 4 runnables que chaque partie Compute et rincer les résultats par lots appropriés.

Autres conseils

Si vous voulez plus d'efficacité dans la partie de calcul de la fonction, puis fraient quatre fils avec 1/4 itérations chacun. Si vous avez besoin quelque chose de plus, vous devez oublier Java et allez cette .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top