首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程vs Pthread

Java线程vs Pthread
EN

Stack Overflow用户
提问于 2011-03-11 14:05:24
回答 2查看 14.6K关注 0票数 27

我在今天的一次面试中被问到这个问题。

“当我们用pthread_create() (POSIX thread )创建线程时,线程会自动启动。为什么我们需要在Java语言中显式地调用start()。当我们创建线程的实例时,为什么Java不启动线程呢?”

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-11 14:17:56

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

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

代码语言:javascript
复制
public Thread(Runnable target, String name, ThreadGroup threadGroup, int priority, boolean daemon, ContextClassLoader contextClassLoader, long stackSize)

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

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

票数 23
EN

Stack Overflow用户

发布于 2011-03-11 14:45:43

原因很多。但我会给你几个:

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

我希望你能明白这一点。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5269535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档