线程间通信程序

  • 本文关键字:程序 通信 线程 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行,这些是哪个q?2.为什么在第6行没有实例化对象?直接调用启动函数?谢谢

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

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

  • this.q是第2行中声明的实例变量q
  • 普通q是第4行中声明的构造函数参数
  • 在第6行中,通过new实例化对象,然后立即调用start方法。只是没有保留对该对象的任何显式引用。然而,由于它是用来启动线程的,因此它将在该线程中被隐式引用,因此在线程完成之前,它不符合垃圾收集的条件

在第5行,类的private(this.(q用构造函数中传递的q实例化。

在第6行,创建了一个新的Thread,但该对象再也不用了,所以这只是一个很短的方法。

  Thread t = new Thread(this,"Producer");
  t.start();

相当于

  new Thread(this,"Producer").start();
  1. 在语句this.q = q;中,this.q表示类实例的q字段,而q表示参数
  2. new Thread(this, "Producer")创建Thread类的一个新实例,因此是的,在调用start()方法之前实例化一个对象

在第5行,this.q指当前构造的Producer对象的字段q。第二个q是指构造函数参数,即已传递给构造函数的Q

在第6行上,构造了一个新的Thread对象。它只是没有分配给任何变量。相反,直接调用start()方法。当不需要引用Thread对象时,这是一种常见的模式。

可以将其替换为以下等效代码:

Thread thread = new Thread(this, "Producer");
thread.start();

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

最新更新