Class Producer implements Runnable
Q q;
Producer(Q q) {
this.q = q; // line- 5
new Thread(this, "Producer").start();
}
public void run(){
int i = 0;
while(true){
q.put(i++);
}
}
}
嘿,有人可以告诉我: 1.在第5行,这些是哪个? 2.为什么在第6行没有实例化对象?直接调用启动函数? 感谢...
答案 0 :(得分:0)
第5行 - 将q实例变量设置为传递给Producers构造函数的q的值。
第6行 - 实例化新的线程。它从构造函数返回,并立即调用start方法。
答案 1 :(得分:0)
this.q
是第2行中声明的实例变量q
q
是第4行声明的构造函数参数new
实例化对象,然后立即调用start
方法。对于保留的对象没有任何明确的引用。但是,由于它用于启动一个线程,它将在该线程中被隐式引用,因此在线程完成之前不会有资格进行垃圾收集。答案 2 :(得分:0)
在第5行,类'private(this。)q使用构造函数中传递的q进行实例化。
在第6行,创建了一个新的Thread,但该对象永远不会再次使用,所以这只是一个简短的方法。
Thread t = new Thread(this,"Producer");
t.start();
相当于
new Thread(this,"Producer").start();
答案 3 :(得分:0)
this.q = q;
中,this.q
引用类实例的q
字段,而q
引用参数。new Thread(this, "Producer")
创建Thread
类的新实例,是的,在调用start()
方法之前,实例化了一个对象。答案 4 :(得分:0)
在第5行,this.q
引用当前构建的q
对象的字段Producer
。第二个q
引用构造函数参数,即已传递给construtor的Q
。
在第6行, 构建了一个新的Thread
对象。它只是没有分配给任何变量。而是直接调用start()
方法。当不需要引用Thread
对象时,这是一种常见的模式。
你可以用这个等效代码替换它:
Thread thread = new Thread(this, "Producer");
thread.start();
这会产生完全相同的效果。