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 :

Lancer deux classes avec les threads


Sujet :

Concurrence et multi-thread Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité1
    Invité(e)
    Par défaut Lancer deux classes avec les threads
    Bonjour les amis,

    C'est très simple...
    MAIN:
    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
    17
    18
    19
    20
    21
     
       public static void main(String[] args) {
            // Give the Thread we are running on a name for debuggers.
        	t.setName(Main.class.getName() + ".main()");
     
        	try {       
    	        t.suspend();
    			new Interface().setVisible(true);
     
    	        if (blabla){
    	        	 server = new PropagatedPipeServer(manager);
    	        	 client = new PropagatedPipeClient(manager);
    	        }
     
        	} catch (Throwable all) {
                // Something bad happened, print out the failure and quit.
                System.err.println("Uncaught Throwable in main() :");
                all.printStackTrace(System.err);
                System.exit(1);
        	}
        }
    Sauf que mon server et mon client ils se lancent jamais en même temps... Le problem c'est que j'ai un wait() dans le server et du coup l'instruction s'arrête au wait() normal...

    SERVEUR:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public class PropagatedPipeServer implements PipeMsgListener {
     
        public PropagatedPipeServer(PeerGroup p) {
            routeAdvElement = null;
            netPeerGroup = p;
            build();
        }
     
        /**
         * Keep running, avoids existing
         */
        private static void waitForever() {
            try {
                System.out.println("Waiting for Messages.");
                synchronized (completeLock) {
                    completeLock.wait();
                }
                System.out.println("Done.");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     
        public static void build() {
     
            System.out.println("Creating Propagated InputPipe for " + pipeAdv.getPipeID());
            try {
                inputPipe = pipeService.createInputPipe(pipeAdv, app.main.Main.server);
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(-1);
            }
            waitForever();
            inputPipe.close();
        }
    }
    CLIENT:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public class PropagatedPipeClient implements PipeMsgListener {
     
        public PropagatedPipeClient(PeerGroup p) {
            netPeerGroup = p;
            build();
        }
     
        public static void build() {
            PipeAdvertisement pipeAdv = PropagatedPipeServer.getPipeAdvertisement();
            PipeService pipeService = netPeerGroup.getPipeService();
     
            System.out.println("Creating Propagated InputPipe for " + pipeAdv.getPipeID());
            try {
                client.inputPipe = pipeService.createInputPipe(pipeAdv, client);
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(-1);
            }
            MessageTransport endpointRouter = (netPeerGroup.getEndpointService()).getMessageTransport("jxta");
     
            if (endpointRouter != null) {
                client.routeControl = (RouteControl) endpointRouter.transportControl(EndpointRouter.GET_ROUTE_CONTROL, null);
                RouteAdvertisement route = client.routeControl.getMyLocalRoute();
     
                if (route != null) {
                    client.routeAdvElement = new TextDocumentMessageElement(ROUTEADV, (XMLDocument) route.getDocument(MimeMediaType.XMLUTF8), null);
                }
            }
     
            System.out.println("Creating Propagated OutputPipe for " + pipeAdv.getPipeID());
            OutputPipe output = null;
     
            try {
                output = pipeService.createOutputPipe(pipeAdv, 1);
            } catch (IOException e) {
                e.printStackTrace();
                System.exit(-1);
            }
            int i = 0;
     
            try {
                while (i < 10000000) {
                    Message ping = new Message();
                    ping.addMessageElement(PropagatedPipeServer.NAMESPACE,
                            new StringMessageElement(PropagatedPipeServer.SRCIDTAG, netPeerGroup.getPeerID().toString(), null));
                    ping.addMessageElement(PropagatedPipeServer.NAMESPACE,
                            new StringMessageElement(PropagatedPipeServer.SRCNAMETAG, netPeerGroup.getPeerName() + " #" + i++, null));
                    if (client.routeAdvElement != null && client.routeControl != null) {
                        ping.addMessageElement(PropagatedPipeServer.NAMESPACE, client.routeAdvElement);
                    }
     
                    System.out.println("Sending message :" + (i - 1));
                    boolean sucess = output.send(ping);
                    System.out.println("Send oing message status :"+sucess);
                }
                Thread.sleep(3000);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    J'ai simplifié le code du mieux que j'ai pu.
    Merci.

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ton serveur et ton client doivent utiliser ou être des Thread (extends Thread ou implements Runnable, à toi de voir). Ils s'exécuteront ainsi tous les deux en parallèles. Le Thread principal de ton appli va continuer de s'exécuter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Invité1
    Invité(e)
    Par défaut Merci!
    Du feu de dieu ça marche!

Discussions similaires

  1. probleme avec les threads et class
    Par cosmoff dans le forum Général Python
    Réponses: 1
    Dernier message: 25/05/2015, 14h32
  2. [Avis aux pros !] Problèmes de la VCL avec les threads
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 17/02/2006, 22h38
  3. Probleme avec les threads
    Par Orahn dans le forum MFC
    Réponses: 5
    Dernier message: 04/11/2005, 10h14
  4. Réponses: 5
    Dernier message: 10/05/2005, 10h22
  5. [langage] Perl a t'il été compiler avec les threads
    Par vodevil dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2005, 15h00

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