我今天在接受采访时被问到这个问题。
“当我们创建一个带有pthread_create()
(POSIX线程)的线程时,线程就会自行启动。为什么我们需要在Java中显式调用start()
。是什么原因导致Java无法启动我们创建它的实例时的线程。“
我一片空白,面试官时间不够,最终他无法向我解释原因。
答案 0 :(得分:18)
在Java中,不立即启动线程会导致更好的API。您可以在线程(守护程序,优先级)上设置属性,而无需在构造函数中设置所有属性。
如果线程立即启动,则需要构造函数
public Thread(Runnable target, String name, ThreadGroup threadGroup, int priority, boolean daemon, ContextClassLoader contextClassLoader, long stackSize)
允许在线程启动之前设置所有这些参数。线程启动后无法设置守护进程属性。
我猜测POSIX API在pthread_create()
的调用中采用了包含所有线程属性的结构,因此立即启动线程是有意义的。
答案 1 :(得分:4)
原因很多。但我给你几点:
pthread_create
来实际执行代码毫无意义我希望你明白了。
答案 2 :(得分:-1)
我觉得,Java允许操作系统安排(运行)线程,而不允许用户使用,因为操作系统更了解执行环境和调度。