Exécution simultanée de plusieurs threads

Bonne journée à tous, pour exécuter plusieurs threads simultanément, il est conseillé de créer différents objects de threads à partir d’une classe ou de créer deux classes où l’une implémente runnable et l’autre étend un thread, puis créez des objects de thread à partir des deux si nécessaire, à condition que nous essayions de l’exécuter 7 à 10 tâches en même temps.

  1. Quelles sont les meilleures solutions? ..
  2. Existe-t-il des pièges ou des problèmes de performances, si l’on crée différents objects de threads à partir d’une même classe?.

Je vous remercie. Conseils appréciés comme toujours.

Personnellement, je choisirais l’ option (1) (création de 2 threads différents de la même classe).

Je ne pense pas qu’il soit nécessaire de créer 2 classes différentes pour le travail pouvant être effectuées par 2 threads différents de la même classe.

  1. Jetez un coup d’œil au superbe paquet java.util.concurrent
  2. La création d’objects de thread différents à partir d’une même classe ne présente aucun écueil en matière de performances.

Voici un court exemple:

 private static class SomeTask implements Runnable { @Override public void run() { doSomething(); } } public static void main(Ssortingng[] args) { ExecutorService executor = Executors.newCachedThreadPool(); for (int i = 0; i < 8; i++) executor.execute(new SomeTask()); } 

Je ne pense pas que la façon dont vous le fassiez soit importante Si vous allez avoir beaucoup de threads de courte durée, vous voudrez probablement un pool de threads, voir java.util.concurrent.Executors. En général, je crée une classe de type runymnable, par exemple

 executor.execute(new Runnable() { //thread code goes here }); 

Il existe peu de différence de performances entre la création d’un thread en étendant le thread ou en implémentant Runnable et en utilisant le new Thread(runnable) . Que ce soit en utilisant une classe ou plusieurs est également sans importance. Vous devez concevoir la structure de votre classe en fonction du travail à effectuer. si deux threads effectuent le même travail sur des données différentes, utilisez la même classe pour les deux.

L’access aux données partagées (qu’il s’agisse de variables de classe statiques ou de quelque chose d’autre) est toujours un gros problème.

La principale chose qui fait la différence est la manière dont vous avez conçu votre hiérarchie d’objects: si vous étendez la classe Thread, vous ne pouvez pas étendre d’autres classes (Java est un inheritance unique). donc en implémentant le Runnable, vous pouvez toujours étendre d’autres classes dans votre modèle de domaine.