zoukankan      html  css  js  c++  java
  • Thread相关API

    参考书籍:《java多线程核心编程技术》

    Thread相关API,这些API可以改变线程对象的状态

              

    • 新建一个线程对象,调用start方法后,系统会为该线程分配CPU资源,此时该线程处于可运行状态(Runnable),这是一个准备运行的状态。如果线程能够抢占到CPU资源,就会处于运行状态(Running)
    • Runnable和Running状态可以相互转换,因为可能一个线程执行一段时间后,有其他线程抢占了CPU资源,这时该线程就从Running切换到Runnable状态
    • 线程执行过程中遇到一个阻塞式IO操作,在该IO操作执行结束前,该线程处于阻塞状态
    • run方法运行结束后进入销毁阶段,整个线程执行完毕

    线程进入Runnable状态的情况:

    • 调用sleep方法后经过指定休眠时间
    • 线程调用的阻塞IO已经返回,阻塞方法执行结束
    • 执行挂起suspend方法的线程,又调用了resume方法
    • 调用了wait方法的线程对象在等待唤醒,另一个线程发出了唤醒(同一个同步锁)
    • 线程对象调用了start方法,且获得了同步监视器

    线程出现阻塞Blocked的情况:

    • 调用sleep方法还没有达到指定的休眠时间
    • 调用suspend挂起方法(容易发生死锁)
    • 调用阻塞式IO方法,且还没有返回结果
    • 调用了wait方法,且没有收到notify唤醒
    • 线程试图获取同步监视器,但是该同步监视器被另一个线程持有

    每个锁对象都有两个队列,就绪队列和阻塞队列。就绪队列存储了获得锁的线程,阻塞队列存储了被阻塞的线程。

    一个线程被唤醒后才会进入就绪队列等待cpu调度;反之,一个线程被wait后,就会进入阻塞队列,等待下一次唤醒

  • 相关阅读:
    移动端页面使用rem布局
    Vue2.0 render:h => h(App)
    sublime3 快捷键大全
    node-webkit学习之【无边框窗口用JS实现拖动改变大小等】
    mock.js-无需等待,随机产生数据,让前端独立于后端进行开发
    Sublime Text 3 遇到的一些小坑的解决方法
    Angular Cli 升级到最新版本
    Angular 表单嵌套、动态表单
    angular6 iframe应用
    JS 时间格式 相互转化
  • 原文地址:https://www.cnblogs.com/qf123/p/9667415.html
Copyright © 2011-2022 走看看