47 Stimmen

Java-Thread-Beispiel?

Kann jemand ein Beispielprogramm nennen, das Java-Threads auf einfache Weise erklärt? Zum Beispiel, sagen wir, ich habe drei Threads t1 , t2 y t3 . Ich möchte einen Code, der zeigt, dass die Threads gleichzeitig und nicht sequentiell ausgeführt werden.

77voto

Phil Punkte 2768

Hier ein einfaches Beispiel:

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();
   }
}

MeinThread.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);
      }
   }
}

Und etwas Output:

[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

Eine Erklärung - Jeder MyThread Objekt versucht, Zahlen von 0 bis 300 zu drucken, aber sie sind nur für bestimmte Bereiche dieses Bereichs zuständig. Ich habe mich für eine Aufteilung nach Indizes entschieden, wobei jeder Thread um die Gesamtzahl der Threads vorausspringt. Also t1 hat den Index 0, 3, 6, 9, usw.

Ohne IO können triviale Berechnungen wie diese immer noch siehe als ob die Threads sequentiell ausgeführt werden, weshalb ich nur den ersten Teil der Ausgabe gezeigt habe. Auf meinem Computer wird nach dieser Ausgabe der Thread mit der ID 10 auf einmal beendet, gefolgt von 9 und dann 8. Wenn Sie eine Wartezeit oder ein Yield einfügen, können Sie es besser sehen:

MeinThread.java

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

Und die Ausgabe:

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

Jetzt können Sie sehen, wie jeder Thread ausgeführt wird, die Kontrolle frühzeitig abgibt und der nächste ausgeführt wird.

8voto

Tim Bender Punkte 19653

Es gibt keine Garantie dafür, dass Ihre Threads gleichzeitig ausgeführt werden, unabhängig von jedem trivialen Beispiel, das jemand anderes einstellt. Wenn Ihr Betriebssystem dem Java-Prozess nur einen Prozessor zur Verfügung stellt, werden Ihre Java-Threads trotzdem für jede Zeitscheibe nach dem Round-Robin-Prinzip eingeplant. Das heißt, es werden nie zwei gleichzeitig ausgeführt, aber die Arbeit, die sie verrichten, wird verschachtelt sein. Sie können Überwachungstools wie die Java Visual VM (Standard im JDK) verwenden, um die Threads zu beobachten, die in einem Java-Prozess ausgeführt werden.

4voto

Sahil Jain Punkte 41

Ein einfaches Beispiel:

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();
    }
}

0voto

abd alkojok Punkte 1

Erstellen Sie eine Java-Anwendung, in der Sie zwei Threads definieren, nämlich t1 und t2. Der Thread t1 wird die Zufallszahlen 0 und 1 erzeugen (simulieren Sie den Wurf einer Münze). 0 bedeutet Kopf und eins bedeutet Schwanz. der andere Thread t2 wird das gleiche tun t1 und t2 wird diese Schleife 100 Mal wiederholen und schließlich sollte Ihre Anwendung bestimmen, wie oft t1 die von t2 generierte Zahl errät und dann die Punktzahl anzeigen. zum Beispiel, wenn Thread t1 20 von 100 Zahlen errät, dann ist die Punktzahl von t1 20/100 =0,2, wenn t1 100 Zahlen errät, dann bekommt er die Punktzahl 1 und so weiter

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X