Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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
Java 为什么不';线程start和run方法没有返回任何内容吗?_Java_Multithreading - Fatal编程技术网

Java 为什么不';线程start和run方法没有返回任何内容吗?

Java 为什么不';线程start和run方法没有返回任何内容吗?,java,multithreading,Java,Multithreading,我想知道为什么Thread.start(现有的JDK1.0)方法设计为不返回对象。我知道开发人员可以使用callable,它与JDK1.5类似,但很晚才出现。我知道人们可以使用一种变通方法,比如在线程构造函数中传递一个结果容器来包含线程结果,但我还是想知道为什么它不是设计用来返回结果的 我是不是遗漏了什么?它在设计方面是好的(比如消除了显式返回null的需要,即使它不是必需的)还是一种设计 缺陷?Thread.start()仅启动线程执行并返回。通常在返回时,线程仍在执行,甚至等待开始执行,因此

我想知道为什么Thread.start(现有的JDK1.0)方法设计为不返回对象。我知道开发人员可以使用callable,它与JDK1.5类似,但很晚才出现。我知道人们可以使用一种变通方法,比如在线程构造函数中传递一个结果容器来包含线程结果,但我还是想知道为什么它不是设计用来返回结果的

我是不是遗漏了什么?它在设计方面是好的(比如消除了显式返回null的需要,即使它不是必需的)还是一种设计 缺陷?

Thread.start()
仅启动线程执行并返回。通常在返回时,线程仍在执行,甚至等待开始执行,因此还没有返回结果。由于此时没有返回任何内容,因此不让
Thread.start()
返回任何内容是有意义的

Thread.run()
通常不会被代码调用,因为调用它会在现有线程中运行该方法,而不是在新线程中运行。相反,在JVM创建新线程后,新线程中的Java虚拟机(JVM)会调用
Thread.run()
。JVM代码当然不知道线程应该做什么,也不知道如何处理返回值,因此
thread.run()
也没有返回值。

thread.start()
只是开始线程执行并返回。通常在返回时,线程仍在执行,甚至等待开始执行,因此还没有返回结果。由于此时没有返回任何内容,因此不让
Thread.start()
返回任何内容是有意义的


Thread.run()
通常不会被代码调用,因为调用它会在现有线程中运行该方法,而不是在新线程中运行。相反,在JVM创建新线程后,新线程中的Java虚拟机(JVM)会调用
Thread.run()
。JVM代码当然不知道线程应该做什么,也不知道如何处理返回值,因此
thread.run()
也没有返回值。

实际上没有返回值
Thread.start()
仅将此线程“放入”内部执行计划程序。这并不意味着线程立即开始执行代码。当内部调度程序决定线程已准备好执行时—它将从
run()
方法开始执行代码—当然可以随时切换到执行另一个线程

真的没有什么可以回报的了
Thread.start()
仅将此线程“放入”内部执行计划程序。这并不意味着线程立即开始执行代码。当内部调度程序决定线程已准备好执行时—它将从
run()
方法开始执行代码—当然可以随时切换到执行另一个线程

在您看来,该方法应该返回什么?我无法想象一个适用于大多数线程的通用解决方案。而且,我的大多数线程甚至都不是为返回结果而设计的。我的意思是使用线程的唯一目标是并行执行代码。在很多情况下,您希望执行不返回结果的代码。还返回一个结果意味着存在某种连接结果的监控过程,也有很多情况下你没有这个。所以默认的解决方案是返回void,但是你可以扩展
线程
,并用你自己的结果类和
getResult
方法引入一个结果字段。例如,像
ThreadWithResult这样的类扩展了Thread
。我不知道他们为什么要这样设计
Callable
,你可能会对这两个版本都有争议——有结果的和没有结果的。一个可能的原因可能是引入了泛型,因为如果没有泛型,“
可调用的
”就很难使用。要回答您的问题
,您认为该方法应该返回什么
,就像Callable一样。这在JDK1.0中可能是不可能的,因为泛型是在很久以后才出现的。是的,它们是在版本1.5中出现的,正好是
Callable
出现的地方。那么,这也是我的猜测。你打算如何使用这个结果?你认为这个方法应该返回什么?我无法想象一个适用于大多数线程的通用解决方案。而且,我的大多数线程甚至都不是为返回结果而设计的。我的意思是使用线程的唯一目标是并行执行代码。在很多情况下,您希望执行不返回结果的代码。还返回一个结果意味着存在某种连接结果的监控过程,也有很多情况下你没有这个。所以默认的解决方案是返回void,但是你可以扩展
线程
,并用你自己的结果类和
getResult
方法引入一个结果字段。例如,像
ThreadWithResult这样的类扩展了Thread
。我不知道他们为什么要这样设计
Callable
,你可能会对这两个版本都有争议——有结果的和没有结果的。一个可能的原因可能是引入了泛型,因为如果没有泛型,“
可调用的
”就很难使用。要回答您的问题
,您认为该方法应该返回什么
,就像Callable一样。这在JDK1.0中可能是不可能的,因为泛型是在很久以后才出现的。是的,它们是在版本1.5中出现的,正好是
Callable
出现的地方。所以,这也是我的猜测。你将如何使用这个结果?