• JAVA虚拟机JVM-4.线程模型


    线程的实现方式

    线程主要有三种实现方式:使用内核线程实现(1:1实现),使用用户线程实现(1:N实现),使用用户线程加轻量级进程混合实现(N:M实现)

    Java线程实现

    JDK1.3之后,采用内核线程实现的方式实现JAVA线程。

    java线程调度模式

    线程调度主要有两种模式:一种是协同式线程调度,另一种是抢占式线程调度。

    协同式线程调度的多线程系统,线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动同志系统切换到另一个线程上去。好处是实现简单,坏处就是时间不可控制,可能某些任务阻塞了线程,一直无法释放占用线程资源。

    抢占式线程调度,线程由操作系统来分配执行时间,线程切换不由线程本身决定,Java语言使用的是抢占式线程调度。(java语言设置了10个线程优先级,优先级越高的线程越容易被系统执行

    线程状态转换

    Java语言定义了6种线程状态,在任意时间点,一个线程只能有一种状态,并且可以通过特定的方法进行线程状态的切换。

    • 新建(New):创建后尚未启动的线程处于这种状态。
    • 运行(Runnable):包括操作系统线程状态种的Running和Ready。
    • 无限期等待(Waiting):处于这种状态的线程不会被分配处理器执行时间,他们要被其他线程显示唤醒。
    • 限期等待(Timed Waiting):处于这种状态的线程也不会被处理器分配执行时间,不过无序等待被其他线程显示唤醒,在一定时间后会自动唤醒。
    • 阻塞(Blocked):线程被阻塞了,阻塞状态和等待状态区别是,阻塞状态在等待获取一个排他锁,这个事件将在另一个线程放弃这个锁的时候发生,而等待状态则是等待一段时间或者等其他线程唤醒动作的时候发生。
    • 结束(Terminated):已终止的线程状态,表示线程已经执行结束。

    协程

    内核线程调度的开销主要来源于内核态和用户态之间的状态转换,而这两种状态的转换的开销主要来自于响应中断、保护和恢复执行现场的成本。

    用户线程的出现改善了线程切换的问题,起初的用户线程采用协同是调度,所以他有一个别名叫做“协程”。

    协程的主要优势是轻量级,局限就是应用层实现的内容比较多,因为所有的线程状态的操作都要用户自己实现。

  • 相关阅读:
    命名是个技术活(转)
    我想知道的是这个月哪种商品销售量最高,比上个月怎么样?销量近几个月的走势是什么?有没有未达标的?有没有超额完成的?超额完成了多少?我可不关心这个月到底售出了多少件,几点售出的,谁买的(转)
    一个demo
    oracle 创建字段自增长——两种实现方式汇总(转)
    Ruby 一些经常使用的细节
    CMap与hash_map效率对照
    Unity 4.5.2 for Mac 下载+安装+破解
    Android中View绘制流程以及invalidate()等相关方法分析
    Android Studio 100 tips and tricks
    JavaScript-2.2 document.write 输出到页面的内容
  • 原文地址:https://www.cnblogs.com/wangb0402/p/12628661.html
Copyright © 2020-2023  润新知