【问题标题】:Why doesn't java.lang.Thread class have a constructor which takes only a ThreadGroup in?为什么 java.lang.Thread 类没有一个只接受一个 ThreadGroup 的构造函数?
【发布时间】:2015-09-13 01:20:22
【问题描述】:

java.lang.Thread 类有一个构造函数,它只接受一个字符串参数作为线程名称。它有一个构造函数,它只接受一个 Runnable 目标。但它也有一个默认构造函数。这意味着名称或 Runnable 目标不是强制性的。

但是在使用 ThreadGroup 创建线程时,这有点不同。没有构造函数只接受一个 ThreadGroup。至少名称或 Runnable 目标与 ThreadGroup 一起进入。

java.lang.Thread 类是否有任何理由没有只接受 ThreadGroup 的构造函数?

【问题讨论】:

  • 我认为创建线程后不能将线程添加到线程组。创建 Thread 时必须给出 ThreadGroup。
  • 如果不是作者,就很难回答“为什么作者决定不做……”这样的问题。但无论如何,使用其他构造函数之一很容易做到这一点:new Thread(myThreadGroup, (Runnable)null).
  • 过去,将 Thread 子类化为比现在更容易接受。

标签: java multithreading constructor


【解决方案1】:

如果您需要创建一个只有ThreadGroup 参数的Thread,您可以使用带有空RunnableThread(ThreadGroup, Runnable) 构造函数,这将具有相同的效果。即,

t = new Thread(threadGroup, (Runnable)null);

(为了消除 Thread(ThreadGroup, String) 构造函数的歧义,需要进行强制转换。)

没有绝对的理由为什么Thread 不能有一个只采用ThreadGroup 的构造函数,但是已经有八个 构造函数了。它们中的每一个都是测试和文档的复杂性和负担,并试图弄清楚你正在调用哪个。第九个构造函数很难证明它的存在。事实上,考虑到ThreadGroups 的使用率非常低,如果重载更少而不是更多,也不会造成损失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多