2017-03-24 4 views
-3

Ich habe folgenden Code-Block:Objekt nicht in einem Thread zu initialisieren

class ThreadTest implements Runnable{ 
     private ClassTest c; 
     private int incoming_variable; 

     public ThreadTest(int x){ 
      incoming_variable=x; 
     } 

    @Override 
    public void run(){ 
      c=new ClassTest(); 
      System.out.println("Object initialized"); 
      { 
       //Do something with object// 
      } 
      } 
} 


public class MainTest{ 

    public static void main(String[] args){ 
     for (int i=0;i<10;i++){ 
      ThreadTest pt=new ThreadTest(i); 
      Thread t = new Thread(pt); 
      t.start(); 
     } 
    } 
} 

Im Wesentlichen, was passiert, ist, dass das Objekt c nie mit der threads.The Meldung „Objekt initialisiert“ initialisiert nie angezeigt wird, und nichts darüber hinaus Zeile ausgeführt. Die Objektinitialisierung funktioniert, wenn ich es innerhalb einer Funktion innerhalb der MainCode-Klasse implementieren..Ich bin ein wenig neu in Java und nicht sicher, warum ein Objekt nicht innerhalb eines Threads initialisiert wird.

Wie kann ich sicherstellen, dass der Thread auf die Initialisierung des Objekts wartet?

+1

Es gibt einige Syntaxfehler in Ihrem Code – freedev

+0

@freedev Was sind die Syntaxfehler? – user5347996

+0

'private ClassTest;' hat keinen Variablennamen. Im Konstruktor 'ThreadTest (x)' gibt es keinen Typ für die 'x'-Variable, und wiederum macht 'x = incoming_variable' keinen Sinn. – freedev

Antwort

-1

Wenn Sie einen Thread erstellt haben, können Sie jede Methode aufrufen, um den Status des Threads vor dem Start zu ändern, oder einen vollständigen Konstruktor zum Initialisieren des Threads verwenden. Eine andere Möglichkeit besteht darin, eine sharable-Sperre zu erstellen, die der in diesem Code verwendeten Objektsperre ähnlich ist. Dann warten Threads. Wenn Sie also den Thread parallel ausführen möchten, müssen Sie diesen Code nicht codieren.

public ThreadTest(int x, ClassTest c) { //declare x as int 
     this.incoming_variable =x; 
     this.c = c; 
} 
Verwandte Themen