Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t java.lang.Thread类是否有一个构造函数,该构造函数只接受线程组?_Java_Multithreading_Constructor - Fatal编程技术网

为什么';t java.lang.Thread类是否有一个构造函数,该构造函数只接受线程组?

为什么';t java.lang.Thread类是否有一个构造函数,该构造函数只接受线程组?,java,multithreading,constructor,Java,Multithreading,Constructor,Thread类有一个构造函数,它只接受一个字符串参数作为线程名。它有一个只接受可运行目标的构造函数。但它也有一个默认构造函数。这意味着名称或可运行目标不是必需的 但是,在使用线程组创建线程时,这有点不同。没有只接受线程组的构造函数。至少名称或可运行目标与ThreadGroup匹配 java.lang.Thread类没有只接受ThreadGroup的构造函数有什么原因吗?如果需要只使用ThreadGroup参数创建Thread,可以将构造函数与nullRunnable一起使用,这将具有相同的效果。

Thread类有一个构造函数,它只接受一个字符串参数作为线程名。它有一个只接受可运行目标的构造函数。但它也有一个默认构造函数。这意味着名称或可运行目标不是必需的

但是,在使用线程组创建线程时,这有点不同。没有只接受线程组的构造函数。至少名称或可运行目标与ThreadGroup匹配


java.lang.Thread类没有只接受ThreadGroup的构造函数有什么原因吗?

如果需要只使用
ThreadGroup
参数创建
Thread
,可以将构造函数与null
Runnable
一起使用,这将具有相同的效果。即

t = new Thread(threadGroup, (Runnable)null);
(强制转换对于从
线程(ThreadGroup,String)
构造函数中消除歧义是必需的。)


没有绝对的理由说明
Thread
不能让构造函数只接受
ThreadGroup
,但是已经有八个构造函数了。它们中的每一个都是测试和文档编制的复杂性和负担,并试图找出您调用的是哪一个。第九个构造器将努力证明它的存在。事实上,考虑到
ThreadGroup
s很少被使用,如果重载更少,而不是更多,那就不会有什么损失。

我认为在创建线程组后,您不能将线程添加到线程组中。创建线程时必须给出线程组。如果不是作者,很难回答“作者为什么决定不做…”这样的问题。但在任何情况下,使用其他构造函数之一都很容易做到这一点:
new Thread(myThreadGroup,(Runnable)null)
。在过去,对线程进行子分类比现在更为普遍。