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

Java Discussion :

Alterner des Threads


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut Alterner des Threads
    Bonjour,

    J'ai le programme qui contient un thread qui affiche des informations pendant le traitement du Thread principal:
    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
    	public static void main(String[] args){	
    		Thread thread= new Thread() {
    			public void run() {
    				while(!isInterrupted()) {
    					System.out.print("test") ;
    				}
    			}
    		};
    		thread.start();
     
    		for(int i = 1; i <=10; i++){
    			System.out.println("i");
    		}
     
    		thread.interrupt();
     
    		try {
    			thread.join() ;
    		} catch(InterruptedException xc) {}
    	}
    Je souhaiterais alterner l'exécution du Thread "thread" avec le Thread principal.
    J'ai donc essayer un sleep ou un yield mais cela ne fonctionne pas.
    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu veux dire une action du thread 1 / une action du thread 2 / une action du thread 1 / une action du thread 2 ?


    Dans ce cas, tu ne fait pas deux thread, et tu met tout ensemble, car ça n'a rien de parallèle :/


    Sinon, si tu veux faire simplement les chose, je ferais que le thread de Traitement pousse des messages de status dans une BlockingQueue et que le thread d'affichage de status lise ces messages au fur et à mesure. Principe du producteur consomateur:

    https://docs.oracle.com/javase/7/doc...kingQueue.html

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    l'exercice dispose de plusieurs corrigés
    en voici un:
    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
     
    public class PingPongC {
     
    	public static void main (String[] args) {
    		final Object moniteur = new Object() ;
    		Thread patience = new Thread() {
    			public void run() {
    				while(!isInterrupted()) {
    					synchronized(moniteur) {
    						System.out.println();
    						for(int iy = 0 ; iy <5 ; iy++){
    							System.out.print(" PONG") ;
    						}
    						moniteur.notify() ;
    						try {
    							moniteur.wait() ;
    						} catch(InterruptedException exc){
    							break;
    						}
     
    					}
    				}
    				System.out.println("\nplus de patience") ;
    			}
    		};
    		patience.start() ;
    		// Début des actions
    		for(int ix = 0 ; ix < 50 ; ix ++) {
    			synchronized(moniteur) {
    				System.out.print("\n\t");
    				for(int iy = 0 ; iy <5 ; iy++){
    					System.out.print(" PING") ;
    				}
    				moniteur.notify() ;
    				try {
    					moniteur.wait() ;
    				} catch(InterruptedException exc){
    					/*IGNORE*/
    				}
    			}
    		}
    		patience.interrupt() ;
    		try {
    			 patience.join() ;
    			System.out.println("arret") ;
    		} catch (InterruptedException exc) {
    			System.out.println("arret interruption") ;
    		}
    	}
    }
    ça s'appelle l'algorithme de la sentinelle: il y a deux sentinelles, l'un veille pendant que l'autre dort. dans quel ordre faut-il faire les opérations: dormir, veiller, réveiller l'autre ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/02/2004, 12h50
  2. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03
  3. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49
  4. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 09h40
  5. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53

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