Java 对象未在线程内初始化

Java 对象未在线程内初始化,java,multithreading,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 ClassTe

我有以下代码块:

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从不使用线程初始化。消息对象initialized从不出现,并且该行以外的任何内容都不会执行。如果我在MainCode类内的函数中实现该对象,则该对象初始化会起作用。我对Java有点陌生,不确定为什么对象不会在线程中初始化


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

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

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

您的文档中几乎没有语法错误code@freedev语法错误是什么?私有类测试;没有变量名。在构造器ThreadTestx中,没有x变量的类型,而且x=传入的_变量也没有意义。您的示例显然无法编译,在尝试将其简化为一个示例时,您可能消除了问题的实际根源。现在的代码对我来说很有用。在为ClassTest提供空定义之后,我初始化了10行对象。