我有以下代码块:
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有点新,并且不确定为什么对象不会在一个线程中初始化。
如何确保线程等待对象初始化。?
答案 0 :(得分:-1)
创建线程时,可以调用任何方法在线程启动之前改变线程的状态,或使用完整的构造函数初始化线程。另一种方法当然是创建一个可共享的锁,类似于此代码中使用的对象锁,然后线程将等待。那么如果你想并行运行线程,那么就不要这样编码了。
public ThreadTest(int x, ClassTest c) { //declare x as int
this.incoming_variable =x;
this.c = c;
}