Java Threads vs Pthreads

2022-09-01 16:03:52

在今天的一次采访中,我被问到了这个问题。

“当我们使用(POSIX Threads)创建线程时,线程会自行启动。为什么我们需要在Java中显式调用。Java在创建线程实例时不启动线程的原因是什么。pthread_create()start()

我一片空白,面试官时间不多,最终他无法向我解释原因。


答案 1

在Java中,不立即启动线程会导致更好的API。您可以在线程上设置属性(守护程序,优先级),而不必在构造函数中设置所有属性。

如果线程立即启动,则需要一个构造函数,

public Thread(Runnable target, String name, ThreadGroup threadGroup, int priority, boolean daemon, ContextClassLoader contextClassLoader, long stackSize)

允许在线程启动之前设置所有这些参数。线程启动后,无法设置守护程序属性。

我猜 POSIX API 采用一个结构,其中包含调用 中的所有线程属性,因此立即启动线程是有意义的。pthread_create()


答案 2

原因有很多。但是我会给你一些:

  • 线程本身可能会在返回实例之前开始执行。
  • 在运行线程之前,必须正确设置上下文类装入器(查看上一点)
  • 在启动线程之前,应设置额外的配置,如优先级
  • pthreads使用指向初始化结构的指针,因为java.lang.Thread无法在c-tor的末尾正确初始化,请参阅上面的几点;直接调用本机以实际执行代码是没有意义的pthread_create

我希望你明白这个想法。