【问题标题】:Threads concept in JavaJava中的线程概念
【发布时间】:2011-01-20 16:02:30
【问题描述】:

我有疑问

有 10 个不同的线程处于可运行状态。每个线程的优先级为 1 到 10。CPU 如何调度或执行这些线程?

谢谢, 拉维

【问题讨论】:

    标签: java multithreading core


    【解决方案1】:

    这个地方什么时候取代了谷歌?

    google搜索Java线程调度,第一个结果:

    http://lass.cs.umass.edu/~shenoy/courses/fall01/labs/talab2.html

    【讨论】:

    • +1,这与同事在寻找自己之前亲自提问有什么不同吗?
    • 大多数搜索并不那么容易。这是简单的关键字和第一反应。有趣的是,这本书很有趣,而且详细程度很高——任何有兴趣的人都应该阅读它。
    • google 的问题是,如果您不确切知道要搜索哪些术语,则结果不是很有用。比较搜索结果:“Java 中的线程概念”与“Java 线程调度”在 StackOverflow 中询问会产生更好的结果,因为在另一端有一个人(即使他只是提供了 gooogle 返回的链接)
    【解决方案2】:

    主流 Java 实现使用“本机线程”,这意味着线程调度是通过操作系统完成的。 Java 线程优先级simply map to OS-specific values。不过,您应该阅读您的操作系统文档以了解这些级别的含义。 :-)

    【讨论】:

    • 我不相信这总是事实。我相信如果平台上不存在原生线程,Java 可以模拟它们。
    • 情况并非总是,你是对的:1.2 之前的 JDK 版本使用绿色线程,IIRC。但是,现在主流的 JVM 都使用原生线程,在我看来,谈论绿色线程实现是没有用的。
    • Java 使用本机线程,如果可能,并非所有实现都有本机线程,其他一些使用“绿色”线程。
    【解决方案3】:

    操作系统有一个线程调度程序,它将(使用算法)根据优先级和其他一些因素决定接下来运行哪个线程。如果你有一个多核系统,那么每个 CPU 可以占用一个线程。

    还有一个事实是,一个线程获得了一个时间槽,然后被切换到另一个线程,并且必须再次等待轮到它。

    但是线程调度是操作系统的功能。

    我希望这能给你一个问题的答案。

    【讨论】:

      【解决方案4】:

      值得注意的是,Windows 会忽略提升的优先级,除非您是管理员,而在 Linux 上,所有优先级都会被忽略,除非您是 root。

      一般来说,玩线程优先级不是很有用。

      【讨论】:

        猜你喜欢
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 1970-01-01
        • 2018-12-18
        • 1970-01-01
        • 2012-07-16
        相关资源
        最近更新 更多