【问题标题】:How can a CountDownLatch object be passed to the constructor of a Thread?如何将 CountDownLatch 对象传递给 Thread 的构造函数?
【发布时间】:2021-06-30 13:54:54
【问题描述】:

我在研究Java中的线程,我看到线程有以下类型的构造函数。

线程()
线程(可运行目标)
线程(可运行目标,字符串名称)
Thread(String name):分配一个新的 Thread 对象
线程(线程组组,可运行目标)
线程(线程组组、可运行目标、字符串名称)
线程(线程组组、可运行目标、字符串名称、长堆栈大小)
线程(线程组组,字符串名称)

但是在尝试一些示例程序时,我看到下面的代码没有给出任何错误:

class MyThread implements Runnable {
    String name;
    CountDownLatch cdl;
    
    MyThread(CountDownLatch cdl, String name) {
        this.name = name;
        this.cdl = cdl;
        new Thread(this);
    }   

那么,更具体地说,new Thread(this) 行在做什么?

【问题讨论】:

  • 什么都不做,创建一个对象但不保存它的引用以供以后调用.start

标签: java multithreading


【解决方案1】:

代码实际上不是Thread,而是Runnable 对象。所以new Thread(this) 意味着构造一个新的Thread 对象,给定构造函数参数一个Runnable 对象(MyThread 本身)。

【讨论】:

  • 明白。但是这条线本身有什么作用呢?我知道构造函数没有返回类型,那么该行有什么作用呢?
  • @Lycanthropeus 该类应该有run() 方法。如果该行是new Thread(this).start();,它将执行 Runnable
  • 那一行new Thread(this).start()出现在main方法中,但不在类定义中。
  • @Lycanthropeus 没有.start(),它什么也做不了。
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 2010-11-17
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2012-07-09
相关资源
最近更新 更多