Interthread通讯程序

时间:2011-06-15 09:23:12

标签: java

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行没有实例化对象?直接调用启动函数? 感谢...

5 个答案:

答案 0 :(得分:0)

第5行 - 将q实例变量设置为传递给Producers构造函数的q的值。

第6行 - 实例化新的线程。它从构造函数返回,并立即调用start方法。

答案 1 :(得分:0)

  • this.q是第2行中声明的实例变量q
  • plain q是第4行声明的构造函数参数
  • 在第6行中,通过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)

  1. 在语句this.q = q;中,this.q引用类实例的q字段,而q引用参数。
  2. 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();

这会产生完全相同的效果。