webentwicklung-frage-antwort-db.com.de

Java - Erstellen eines neuen Threads

Ich bin neu in Threads. Ich wollte eine einfache Funktion erstellen, die getrennt vom Haupt-Thread arbeitet. Aber es scheint nicht zu funktionieren. Ich möchte einfach einen neuen Thread erstellen und dort ein paar Sachen machen, unabhängig davon, was im Haupt-Thread passiert. Dieser Code sieht vielleicht komisch aus, aber ich habe noch keine Erfahrung mit dem Threading. Könnten Sie mir erklären, was daran falsch ist?

  public static void main(String args[]){
      test z=new test();

      z.setBackground(Color.white);

      frame=new JFrame();
      frame.setSize(500,500);
      frame.add(z);
      frame.addKeyListener(z);
      frame.setVisible(true);

      one=new Thread(){
          public void run() {
              one.start();
              try{
                  System.out.println("Does it work?");
                  Thread.sleep(1000);
                  System.out.println("Nope, it doesnt...again.");
              } catch(InterruptedException v){System.out.println(v);}
          }
      };
  }
36
Matt Martin

Sie rufen die one.start()-Methode in der run-Methode Ihres Threads auf. Die run-Methode wird jedoch nur aufgerufen, wenn ein Thread bereits gestartet ist. Tun Sie dies stattdessen:

one = new Thread() {
    public void run() {
        try {
            System.out.println("Does it work?");

            Thread.sleep(1000);

            System.out.println("Nope, it doesnt...again.");
        } catch(InterruptedException v) {
            System.out.println(v);
        }
    }  
};

one.start();
82
stinepike

Sie können wie:

    Thread t1 = new Thread(new Runnable() {
    public void run()
    {
         // code goes here.
    }});  
    t1.start();
15

Das Ziel war, Code zu schreiben, um start () und join () an einem Ort aufzurufen. Die anonyme Parameterklasse ist eine anonyme Funktion. new Thread(() ->{})

new Thread(() ->{
        System.out.println("Does it work?");
        Thread.sleep(1000);
        System.out.println("Nope, it doesnt...again.");       
}){{start();}}.join();

Im Rumpf einer anonymen Klasse befindet sich ein Instanzblock, der start () aufruft. Das Ergebnis ist eine neue Instanz der Klasse Thread mit dem Namen join ().

Sie müssen zwei Dinge tun:

  • Starten Sie den Thread
  • Warten Sie, bis der Thread beendet ist (stirbt), bevor Sie fortfahren

dh

one.start();
one.join();

Wenn Sie es nicht start() tun, wird nichts passieren - create ein Thread tut es nicht execute.

Wenn Sie es nicht join) tun, wird Ihr Haupt-Thread möglicherweise beendet und beendet und das gesamte Programm wird beendet vor der andere Thread wurde für die Ausführung geplant. Es ist unbestimmt, ob es läuft oder nicht, wenn Sie es nicht beitreten. Der neue Thread wird normalerweise ausgeführt, manchmal jedoch nicht. Besser sicher zu sein.

7
Bohemian

Die run () - Methode wird von start () aufgerufen. Das passiert automatisch. Sie müssen nur start () aufrufen. Eine vollständige Anleitung zum Erstellen und Aufrufen von Threads finden Sie in meinem Blog http://preciselyconcise.com/Java/concurrency/a_concurrency.php

2
Sai Sunder

Wenn Sie möchten, dass mehr Thread erstellt wird, müssen Sie in obigem Fall den Code in der run-Methode wiederholen oder mindestens einige Methoden innerhalb aufrufen.

Versuchen Sie es mit diesem Befehl, der Ihnen hilft, so oft anzurufen, wie Sie möchten ... Es ist hilfreich, wenn Sie Ihren Lauf mehrmals ausführen müssen, und zwar von vielen Stellen aus.

class A extends Thread {
    public void run() {
             //Code you want to get executed seperately then main thread.       
    }
     }

Hauptklasse

A obj1 = new A();
obj1.start();

A obj2 = new A();
obj2.start();
2
Jayesh

Es gibt verschiedene Möglichkeiten, einen Thread zu erstellen

  1. durch Erweitern von Thread class> 5
  2. durch Implementierung von Runnable interface -> 5
  3. mit ExecutorService inteface -> = 8
1
bshr

Ein einfacherer Weg kann sein:

new Thread(YourSampleClass).start();    
0
Mehdi

Da gerade eine neue Frage dagegen geschlossen wurde: Sie sollten keine Thread-Objekte erstellen. Hier ist eine andere Möglichkeit:

public void method() {
    Executors.newSingleThreadExecutor().submit(() -> {
        // yourCode
    });
}

Sie sollten den Executor-Service jedoch wahrscheinlich zwischen den Aufrufen beibehalten.

0
daniu

Bitte versuchen Sie das. Sie werden alles perfekt verstehen, nachdem Sie meine Lösung angeschaut haben.

Es gibt nur zwei Möglichkeiten, Threads in Java zu erstellen

mit Geräten lauffähig

class One implements Runnable {
@Override
public void run() {
    System.out.println("Running thread 1 ... ");
}

mit verlängertem Thread

class Two extends Thread {
@Override
public void run() {
    System.out.println("Running thread 2 ... ");
}

Deine MAIN-Klasse hier

public class ExampleMain {
public static void main(String[] args) {

    One demo1 = new One();
    Thread t1 = new Thread(demo1);
    t1.start();

    Two demo2 = new Two();
    Thread t2 = new Thread(demo2);
    t2.start();
}

}

0