Threads qui tournent en parallele

sparetime Messages postés 34 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 17 août 2004 - 8 mai 2004 à 23:29
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 - 9 mai 2004 à 11:36
bonsoir
je veux executer deux threads en java en parallele de facon que les deux sont declenchés en meme temps et tous les deux s'executent de facon independante
j'ai trouvé(ou peut etre j'ai mal compris) que pour ce faire il suffit de lancer les deux threads avec start dans une meme classe mais qd je fais comme ca j'ai toujours le premier thread qui s'execute sans passer la main au second
any help??avec un petit exemple pour mieux comprendre si possible
merci

2 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
9 mai 2004 à 11:12
Salut,

avec les threads il y a 2 ou 3 trucs à comprendre. Tout d'abord les threads ne s'exécutent pas "réellement" en parallèle sur une machine monoprocesseur. Un seul thread s'exécute à la fois mais on a l'impression que c'est en même temps.
Ensuite c'est la JVM qui décide quand chaque thread doit tourner (ordonnanceur de taches). On peut l'inciter à choisir un thread plutôt qu'un autre mais ce n'est pas le cas général.
Enfin le passage d'un thread à un autre se fait si le temps d'exécution d'un thread est suffisament long (si le temps est trop le court, le thread s'exécutera en entier avant de passer au suivant) ou si il y a une "pause" dans le thread (explicite ou implicite).
Apparement tu fais ce qu'il faut (start sur chaque thread) mais peut être que le temps d'exécution du 1er thread est trop court.
Voici un petit exemple de base (2 threads qui bouclent et affiche la valeur), suivant le nombre de tours de boucle à faire les 2 threads ne s'exécutent pas forcément en même temps.

public class Compteur extends Thread {

    private int cpt;

    /**
     * @see java.lang.Runnable#run()
     */
    public void run() {
        for (int i = 0; i < 10000; i++) {
            System.out.println("thread : " + cpt + " = " + i);
        }
    }

    /**
     * 
     * 
     *  
     */
    public Compteur(int cpt) {
        this.cpt = cpt;
    }

    public static void main(String[] args) {
        new Compteur(1).start();
        new Compteur(2).start();
    }
}
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
9 mai 2004 à 11:36
:big) Neodante :big)

En fai ton appel ça des Threads égoïste !! Pour ne pas qu'il soit égoïste il faut que tu mettes un appel à sleep(20) par exemple pour passer la main aux autres Thread ... normalement la dernière machine virtuelle gère pas trop mal ce prob sans les sleep mais c'est toujours mieux de les mettrent !!!
Egalement plus tard tu pourras t'intéresser à la synchronisation des Threads avec le mot-clé synchronized, et les méthodes wait, notify, ...
@+

[Responsable www.neogamedev.com]
0
Rejoignez-nous