2017-03-24 21 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(); 
     } 
    } 
} 

本質上發生了什麼是對象C從不與threads.The消息初始化「初始化對象」從未出現並沒有什麼超出行執行。對象初始化工程,如果我在MainCode類內的函數內實現它。我對Java有點新,不知道爲什麼一個對象不在線程內初始化。

如何確保線程等待對象初始化?

+1

代碼中的語法錯誤很少 – freedev

+0

@freedev什麼是語法錯誤? – user5347996

+0

'私人ClassTest;'沒有變量名稱。在構造函數ThreadTest(x)中沒有'x'變量的類型,並且'x = incoming_variable'也沒有意義。 – freedev

回答

-1

當你創建一個線程時,你可以調用任何方法來在線程啓動之前改變它的狀態,或者使用完整的構造函數來初始化線程。另一種方法當然是創建一個可共享的鎖,類似於這個代碼中使用的對象鎖,然後線程將等待。那麼如果你想並行運行線程,那麼你就不用這種方式編碼。

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