IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Concurrence et multi-thread Java Discussion :

organisation multi Thread


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Par défaut organisation multi Thread
    Salut, je commence vraiment en JAVA et je crée mon premier programme en ce moment.
    Il sert à gérer des verin qui peuvent sortir et rentrer. J'ai donc une class Verin qui tourne trés bien mais j'ai une routine qui tourne sur chaque Verin dans un Thread à part (créé dans le constructeur de la classe Verin, chaque Verin a son "propre" Thread qui lit la position actuelle du verin) Tout ça fonctionne bien.
    Maintenant, Je m'attaque au "player". Après avoir générer tous mes Verins, je veux les commander en fonction d'un Array qui dira a quelle position doit se rendre chaque vérin a un instant t.
    Je ne pense pas que ça va me poser trop de problème mais je me pose une question sur la maniére dont je dois organiser tout ça par rapport aux Thread car je vais avoir entre 20 et 30 Verins à gérer...
    1-
    Est il plus performant d'avoir une cinquantaine de petits Thread qui tournent en même temps et qui font chacun une tache trés simple ou bien ne vaudrait il pas mieux que je fasse un seul thread qui fait ce qu'il a à faire pour chaque Verins avec une boucle for (...)
    2-
    Chaque Thread est gérer pendant que les autres dorment (sleep ()) et donc, ça risque de créer un petit décalage entre la lecture de chaque Vérins et les ordres que je donnerais à chacun ne seront pas vraiment simutanés... Je crois en fait que mon point 2 réponds à mon point 1...

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Tu peux utiliser un seul Thread, je pense que ça sera mieux, et tu ajoutes les actions que tu veux faire... Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ExecutorService pool = Executors.newSingleThreadExecutor();
     
    /* Et pour ajouter une action... */
    pool.execute(new Runnable() {
        public void run() {
            doSomething();
        }
    }
    L'action sera mise en file d'attente et exécutée quand elle sera en tête de la file d'attente...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Par défaut
    Je pense en effet qu'un seul gros Thread ira mieux mais je ne connais pas la Classe ExecutorService... Qu'est ce que ça a de mieux que que la classe Thread que j'utilise en ce moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private class ThreadLecturePos extends Thread {
    		ThreadLecturePos(){
    			start ();
    		}
    		public void run (){
    			while (true){
    				try {
    					Thread.sleep (500);	
    				} catch (InterruptedException e){
    					System.err.println("intrruption inattendue.");
    				}
                                    // TRUCS A FAIRE
    			}
    		}
    	}
    	private final ThreadLecturePos sp = new ThreadLecturePos ();

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par JoGoiA
    Je pense en effet qu'un seul gros Thread ira mieux mais je ne connais pas la Classe ExecutorService... Qu'est ce que ça a de mieux que que la classe Thread que j'utilise en ce moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    private class ThreadLecturePos extends Thread {
    		ThreadLecturePos(){
    			start ();
    		}
    		public void run (){
    			while (true){
    				try {
    					Thread.sleep (500);	
    				} catch (InterruptedException e){
    					System.err.println("intrruption inattendue.");
    				}
                                    // TRUCS A FAIRE
    			}
    		}
    	}
    	private final ThreadLecturePos sp = new ThreadLecturePos ();
    Ta classe Thread, elle effectue toutes les 500 ms une action... Alors que ExecutorService, c'est une file d'attente bloquante, qui exécutera les actions les unes après les autres... Et tu peux définir les actions à effectuer de l'extérieur, t'as pas TOUT à l'intérieur de ton Thread...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Par défaut
    J'ai besoin du sleep pour effectuer mes commandes à intervals réguliers...
    Cependant, j'imagine que je peux mettre un compteur de milliseconde dans le ExecutorService pour qu'il déclenche les actions au bon moment (et pas seulement quand l'ordre a donner est en haut de la pile...)
    Je vais regarder ça de plus prés.
    Par contre, je ne comprends ce que tu me dis à propos d'éxécuter des actions à l'extérieur. Avec mon Thread, j'appele des fonctions définie ailleurs que dans le thread sans problème... Et j'envoie des commande à mes Vérins qui sont des instances extérieures au Thread...

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par JoGoiA
    J'ai besoin du sleep pour effectuer mes commandes à intervals réguliers...
    Tu ferais mieux d'utiliser java.util.Timer (pour le modèle) ou javax.swing.Time (pour la vue) si tu veux déclencher des évènements à intervalles VRAIMENT réguliers.

    [CODE]Par contre, je ne comprends ce que tu me dis à propos d'éxécuter des actions à l'extérieur. Avec mon Thread, j'appele des fonctions définie ailleurs que dans le thread sans problème... Et j'envoie des commande à mes Vérins qui sont des instances extérieures au Thread...[/QUOTE]
    Ce que je veux dire, c'est que les actions que ton thread va effectuer ("appeler des fonctions définies ailleurs"), le code est écrit DANS le thread...

    Alors que le Thread géré par ExecutorService, tu peux, de l'extérieur (par executorService.execute(Runnable)), lui donner des actions à effectuer (suffit de lui donner un Runnable)...

    Enfin ça dépend du cas de figure, souvent c'est bien pratique

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 19
    Par défaut
    J'vais lire la doc d'ExecutorService...

    Merci pour tes réponses rapides.

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo