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后,就会进入阻塞队列,等待下一次唤醒

  • 相关阅读:
    CSS3阴影 box-shadow的使用和技巧总结
    css实现一行文字居中,多行文字左对齐
    让一个div里面的其它div或者标签内容居中
    巧用css内容生成
    Emmet-前端开发神器
    新手向:Vue 2.0 的建议学习顺序
    require() 源码解读
    Vue-webpack项目配置详解
    webpack---webpack构建vue多页面框架(一、工程布局)
    STS创建spring boot项目,pom.xml文件第一行报错
  • 原文地址:https://www.cnblogs.com/qf123/p/9667415.html
Copyright © 2011-2022 走看看