2017-03-24 18 views
-3

以内に初期化しない:オブジェクトは、私は次のコードブロックを持っているスレッド

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

基本的に何が起こることは、オブジェクトがそれを超えて表示されず、何も決してthreads.Theメッセージ「初期化されたオブジェクト」で初期化したことがないcがありますオブジェクトの初期化は、MainCodeクラス内の関数内で実装すると機能します。Javaに少し新しく、なぜオブジェクトがスレッド内で初期化されないのかわかりません。

スレッドがオブジェクトの初期化を待つようにするにはどうすればよいですか?

+1

コードに構文エラーがあります。 – freedev

+0

@freedev構文エラーは何ですか? – user5347996

+0

'private ClassTest;'には変数名がありません。コンストラクタ 'ThreadTest(x)'には 'x'変数の型はなく、' x = incoming_variable'も意味をなさない。 – freedev

答えて

-1

スレッドを作成したときに、スレッドを開始する前にスレッドの状態を変更したり、完全なコンストラクターを使用してスレッドを初期化したりすることができます。もう1つの方法は、このコードで使用されているオブジェクトロックと同様の共有可能なロックを作成し、スレッドが待機することです。したがって、スレッドを並列に実行する場合は、このようにコーディングしないでください。

public ThreadTest(int x, ClassTest c) { //declare x as int 
     this.incoming_variable =x; 
     this.c = c; 
} 
関連する問題