Exemple de thread Java? [fermé]


Quelqu'un Pourrait-il donner un exemple de programme qui explique les Threads Java de manière simple? Par exemple, dire que j'ai trois fils t1, t2 et t3. Je veux un code qui démontre que les threads s'exécutent simultanément, et non séquentiellement.

Author: templatetypedef, 2010-03-28

4 answers

Voici un exemple simple:

ThreadTest.java

public class ThreadTest
{
   public static void main(String [] args)
   {
      MyThread t1 = new MyThread(0, 3, 300);
      MyThread t2 = new MyThread(1, 3, 300);
      MyThread t3 = new MyThread(2, 3, 300);

      t1.start();
      t2.start();
      t3.start();
   }
}

MyThread.java

public class MyThread extends Thread
{
   private int startIdx, nThreads, maxIdx;

   public MyThread(int s, int n, int m)
   {
      this.startIdx = s;
      this.nThreads = n;
      this.maxIdx = m;
   }

   @Override
   public void run()
   {
      for(int i = this.startIdx; i < this.maxIdx; i += this.nThreads)
      {
         System.out.println("[ID " + this.getId() + "] " + i);
      }
   }
}

Et quelques sorties:

[ID 9] 1
[ID 10] 2
[ID 8] 0
[ID 10] 5
[ID 9] 4
[ID 10] 8
[ID 8] 3
[ID 10] 11
[ID 10] 14
[ID 10] 17
[ID 10] 20
[ID 10] 23

Une explication - Chaque objet MyThread essaie d'imprimer des nombres de 0 à 300, mais ils ne sont responsables que de certaines régions de cette plage. J'ai choisi de le diviser par indices, chaque thread sautant en avant par le nombre total de threads. Donc, t1 fait index 0, 3, 6, 9, etc.

Maintenant, sans IO, des calculs triviaux comme cela peut toujours regarder comme si les threads s'exécutaient séquentiellement, c'est pourquoi je viens de montrer la première partie de la sortie. Sur mon ordinateur, après que ce thread de sortie avec ID 10 se termine en même temps, suivi de 9, puis de 8. Si vous mettez dans une attente ou un rendement, vous pouvez le voir mieux:

MyThread.java

System.out.println("[ID " + this.getId() + "] " + i);
Thread.yield();

Et la sortie:

[ID 8] 0
[ID 9] 1
[ID 10] 2
[ID 8] 3
[ID 9] 4
[ID 8] 6
[ID 10] 5
[ID 9] 7

Maintenant, vous pouvez voir chaque thread s'exécuter, abandonner le contrôle tôt, et l'exécution suivante.

 78
Author: Phil, 2010-03-28 05:20:52

Il n'y a aucune garantie que vos threads s'exécutent simultanément, quel que soit l'exemple trivial que quelqu'un d'autre publie. Si votre système d'exploitation ne donne qu'un seul processeur au processus java, vos threads java seront toujours planifiés pour chaque tranche de temps de manière circulaire. Ce qui signifie qu'aucun deux ne sera jamais exécuté simultanément, mais le travail qu'ils font sera entrelacé. Vous pouvez utiliser des outils de surveillance tels que la machine virtuelle visuelle de Java (standard dans le JDK) pour observer les threads s'exécutant dans un Java processus.

 8
Author: Tim Bender, 2012-08-10 20:21:23

Un exemple simple:

public class Test extends Thread {
    public synchronized void run() {
        for (int i = 0; i <= 10; i++) {
            System.out.println("i::"+i);
        }
    }

    public static void main(String[] args) {
        Test obj = new Test();

        Thread t1 = new Thread(obj);
        Thread t2 = new Thread(obj);
        Thread t3 = new Thread(obj);

        t1.start();
        t2.start();
        t3.start();
    }
}
 4
Author: Sahil Jain, 2015-03-22 17:06:58

Créer une application java dans laquelle vous définissez deux threads à savoir t1 et t2, le thread t1 générera un nombre aléatoire 0 et 1 (simuler lancer une pièce ). 0 signifie tête et un signifie queue. l'autre thread t2 fera la même chose t1 et t2 répétera cette boucle 100 fois et enfin votre application devrait déterminer combien de fois t1 devine le nombre généré par t2, puis afficher le score. par exemple, si le thread t1 devine 20 nombre de 100 alors le score de t1 est 20/100 =0.2 si t1 devine 100 nombres puis il obtient le score 1 et ainsi de suite

 0
Author: abd alkojok, 2013-03-24 16:41:22