338 Stimmen

Wie kann ich einen Parameter an einen Java-Thread übergeben?

Kann mir jemand vorschlagen, wie ich einen Parameter an einen Thread übergeben kann?

Und wie funktioniert das bei anonymen Klassen?

6 Stimmen

Könnten Sie vielleicht noch etwas mehr dazu sagen, was genau Sie zu tun versuchen? Es gibt viele verschiedene Techniken, die aber alle vom Endziel abhängen.

4 Stimmen

Meinen Sie die Übergabe eines Parameters an einen bereits laufenden Thread? Denn in allen aktuellen Antworten geht es um die Übergabe von Parametern an neue Threads...

0 Stimmen

Jetzt können Sie Consumer<T> .

12voto

meyi Punkte 6095

Ich weiß, dass ich ein paar Jahre zu spät bin, aber ich bin auf dieses Thema gestoßen und habe einen unorthodoxen Ansatz gewählt. Ich wollte es tun, ohne eine neue Klasse, so ist das, was ich kam mit:

int x = 0;
new Thread((new Runnable() {
     int x;
     public void run() {
        // stuff with x and whatever else you want
     }
     public Runnable pass(int x) {
           this.x = x;
           return this;
     }
}).pass(x)).start();

0 Stimmen

Aber Sie haben tatsächlich eine neue Klasse erstellt - es ist nur eine anonyme Klasse :-) Andererseits ist es genau derselbe Ansatz wie in Lösung Nr.1 in stackoverflow.com/a/39214833/2024692

10voto

bruno conde Punkte 47059

Sie können entweder die Thread class oder die Runnable class und geben Sie die gewünschten Parameter an. Einfache Beispiele finden Sie in der docs . Ich werde sie hierher portieren:

 class PrimeThread extends Thread {
     long minPrime;
     PrimeThread(long minPrime) {
         this.minPrime = minPrime;
     }

     public void run() {
         // compute primes larger than minPrime
          . . .
     }
 }

 PrimeThread p = new PrimeThread(143);
 p.start();

 class PrimeRun implements Runnable {
     long minPrime;
     PrimeRun(long minPrime) {
         this.minPrime = minPrime;
     }

     public void run() {
         // compute primes larger than minPrime
          . . .
     }
 }

 PrimeRun p = new PrimeRun(143);
 new Thread(p).start();

9voto

Mnementh Punkte 48509

Um einen Thread zu erstellen, erstellen Sie normalerweise Ihre eigene Implementierung von Runnable. Übergeben Sie die Parameter an den Thread im Konstruktor dieser Klasse.

class MyThread implements Runnable{
   private int a;
   private String b;
   private double c;

   public MyThread(int a, String b, double c){
      this.a = a;
      this.b = b;
      this.c = c;
   }

   public void run(){
      doSomething(a, b, c);
   }
}

7voto

PaulJWilliams Punkte 18533

Entweder schreiben Sie eine Klasse, die Runnable implementiert, und übergeben alles, was Sie brauchen, in einem entsprechend definierten Konstruktor, oder Sie schreiben eine Klasse, die Thread mit einem entsprechend definierten Konstruktor erweitert, der super() mit entsprechenden Parametern aufruft.

7voto

Jeff G Punkte 4227

Ab Java 8 können Sie ein Lambda verwenden, um Parameter zu erfassen, die tatsächlich endgültig . Zum Beispiel:

final String param1 = "First param";
final int param2 = 2;
new Thread(() -> {
    // Do whatever you want here: param1 and param2 are in-scope!
    System.out.println(param1);
    System.out.println(param2);
}).start();

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