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 :

Relancer un thread proprement


Sujet :

Concurrence et multi-thread Java

  1. #1
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut Relancer un thread proprement
    J'essai de trouver une méthode propre pour redemarrer un thread.
    (dans le cas présent je lance un autre thread pour attendre le bon moment avant de le relancer)

    Je ne pense pas etre le premier a avoir eu probleme similaire, comment avez vous imbriquez vos boucles? drapeaux?

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    package jsl.database.atome;
     
    import javax.swing.event.EventListenerList;
    import jsl.database.atome.event.RefreshEventListener;
     
    public class Refreshor extends Thread {
     
     
    	private EventListenerList	listeners	= new EventListenerList();
    	private long				interval	= 10000;
    	private boolean				actif		= false;
    	private boolean				encours		= false;
     
    	public Refreshor( RefreshEventListener ref ){
    		addRefreshEventListener(ref);
     
    		setPriority(Thread.MIN_PRIORITY);
    		start();
    	}
     
    	public void setActif( boolean go ){
    		actif = go;
    		Thread t = new Thread(){
     
    			public void run(){
     
    				while ( !encours && actif ){
     
    					try{
    						forceRestart();
    						sleep(1000);
     
    					}
    					catch( Exception e ){
    						e.printStackTrace();
    					}
    				}
    			}
    		};
    		t.start();
    	}
     
    	public void setInterval( long i ){
    		interval = i;
    	}
     
    	public boolean isActif(){
    		return actif;
    	}
     
    	private void forceRestart(){
     
    		try{
    			if( !isAlive() && !isInterrupted() ){
    				run();
    			}
     
    		}
    		catch( Exception e ){
    			e.printStackTrace();
    		}
     
     
    	}
     
    	public void run(){
    		encours = true;
    		while ( actif ){
    			try{
    				sleep(interval);
    				if( actif )
    					fireRefreshEvent();
    			}
    			catch( Exception e ){
    				e.printStackTrace();
    			}
    		}
    		encours = false;
    	}
     
    	// //////////////////////////////////////////////
     
    	public void addRefreshEventListener( RefreshEventListener ref ){
    		listeners.add(RefreshEventListener.class, ref);
    	}
     
    	public void removeRefreshEventListener( RefreshEventListener ref ){
    		listeners.remove(RefreshEventListener.class, ref);
    	}
     
    	public RefreshEventListener[] getRefreshEventListeners(){
    		return listeners.getListeners(RefreshEventListener.class);
    	}
     
    	private void fireRefreshEvent(){
     
    		for( RefreshEventListener listener : getRefreshEventListeners() ){
    			listener.refresh();
    		}
    	}
     
    }

  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 "ne pas l'arrêter" au lieu de "le relancer"...
    Par exemple, avec une attente par wait() et un réveil par notify() (ou sur un Lock, await() et signal()).

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut
    est ce que ces methodes ont un impact sur l'utilisation du processeur?

    je cherche a eviter toute consommation superflue de ressource.

  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 eclesia
    est ce que ces methodes ont un impact sur l'utilisation du processeur?

    je cherche a eviter toute consommation superflue de ressource.
    Si j'ai bien compris ta question, tu veux savoir si l'attente est active ou passive?
    Ici, c'est de l'attente passive, et donc ça ne consomme pas du tout de processeur...

  5. #5
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 110
    Par défaut
    Ok merci

    au passage : merci pour ce jolie tuto "Créer ses propres listeners en java"
    j'ai bien apprit la lecon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment arrêter un Thread proprement
    Par takinelinfo dans le forum C#
    Réponses: 9
    Dernier message: 08/01/2018, 08h42
  2. relancer un Thread une fois mort ?
    Par altahir007 dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/01/2013, 17h06
  3. [Thread] Relancer un thread.
    Par Djobird dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 13/07/2009, 17h28
  4. Réponses: 5
    Dernier message: 16/12/2005, 17h41
  5. [Thread]Relancer un thread
    Par Pill_S dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 28/04/2005, 20h41

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