我在今天的一次面试中被问到这个问题。
“当我们用pthread_create() (POSIX thread )创建线程时,线程会自动启动。为什么我们需要在Java语言中显式地调用start()。当我们创建线程的实例时,为什么Java不启动线程呢?”
我当时一片空白,面试官没有时间,最终他无法向我解释原因。
发布于 2011-03-11 14:17:56
在Java中,不立即启动线程会导致更好的API。您可以在线程上设置属性(守护进程、优先级),而不必在构造函数中设置所有属性。
如果线程立即启动,它将需要一个构造函数,
public Thread(Runnable target, String name, ThreadGroup threadGroup, int priority, boolean daemon, ContextClassLoader contextClassLoader, long stackSize)允许在线程启动之前设置所有这些参数。无法在线程启动后设置守护程序属性。
我猜POSIX API在对pthread_create()的调用中采用了一个带有所有线程属性的结构,因此立即启动线程是有意义的。
发布于 2011-03-11 14:45:43
原因很多。但我会给你几个:
pthread_create以实际执行代码没有任何意义我希望你能明白这一点。
https://stackoverflow.com/questions/5269535
复制相似问题