对象未在线程内初始化

时间:2017-03-24 23:58:34

标签: java multithreading

我有以下代码块:

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永远不会用线程初始化。消息“对象初始化”永远不会出现,并且除了该行之外什么都不会执行。如果我在MainCode类中的函数内实现它,对象初始化就会起作用.Im对Java有点新,并且不确定为什么对象不会在一个线程中初始化。

如何确保线程等待对象初始化。?

1 个答案:

答案 0 :(得分:-1)

创建线程时,可以调用任何方法在线程启动之前改变线程的状态,或使用完整的构造函数初始化线程。另一种方法当然是创建一个可共享的锁,类似于此代码中使用的对象锁,然后线程将等待。那么如果你想并行运行线程,那么就不要这样编码了。

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