• Java基础回顾 —线程生命周期


    1. 线程的生命周期:
      一个线程从创建到消亡的过程。

    2. 四种状态:
      创建状态
      可运行状态(就绪状态)
      运行状态
      不可运行状态(堵塞状态)
      消亡状态

    3. 线程状态转换图:

    4. 创建状态:
      当使用new创建一个新的线程对象时,处于创建状态。
      处于创建状态的线程只是 一个空的线程对象,系统不为它分配资源。

    5. 可运行状态(就绪状态):
      执行线程的 start()方法,线程进入线程队列排队,等待CPU为线程分配必须的系统资源,这样就使得该线程处于可运行(Runable)状态。
      这个状态不是运行中状态(Running),因为线程也许实际上并未真正运行。

    6. 运行状态:
      就绪状态的线程被调用,并且获得处理器资源时,线程就进入了运行状态, 并调用线程体的run()方法。如果给定的CPU时间用完或者调用yield()方法,运行状态的线程可能就会进入就绪状态。

    7. 不可运行状态(堵塞状态):
      当发生下列事件时,处于运行状态的线程会转入到不可运行状态。

    1. 调用了sleep()方法;
    2. 线程调用wait()方法等待特定条件的满足;
    3. 线程输入/输出阻塞;
    1. 返回可运行状态:
      处于睡眠状态的线程在指定时间过去后;
      如果线程在等待某一个条件,另一个对象必须通过notify() 或者notifyAll()方法通知等待线程条件的改变;
      如果线程因为输入/输出阻塞,等待输入/输出完成;
    2. 消亡状态:
      线程的run()方法结束之后,该线程自然消亡
    3. 线程调度策略:
      线程调度器选择优先级最高的线程运行,但是特殊情况还是会终止线程的运行。
      线程体中调用了yield()方法,让出了对CPU的占用权。
      线程体中调用了sleep()方法,使线程进入睡眠状态。
      线程由于I/O操作而受阻塞。
      另一个更高于优先级的线程出现。
      在支持时间片的系统中,该线程的时间片用完。
    4. 关于成员变量与局部变量 对于Runnable类型:
      如果一个类继承Thread类,则不适合多个线程共享资源,而实现了Runnable接口,就可以方便的实现资源共享
      如果一个变量是成员变量。那么多个线程对于同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的( 也就是说一个线程对成员变量的改变会影响另一个线程)。
      如果一个变量是局部变量,那么每个线程都会有一个局部变量的拷贝, 一个线程对该局部变量的改变不会影响到其他线程。
  • 相关阅读:
    正则表达式--断言
    ie6兼容性处理
    git log 高级用法
    html-文件上传设置accept类型延时问题
    sublime text3 -- JavaScript Completions
    Git进行fork后如何与原仓库同步
    Redis的数据结构及应用场景
    PHP手册-函数参考-日期与时间相关扩展
    什么是缓存
    MySQL的连接方式、事务、性能优化
  • 原文地址:https://www.cnblogs.com/nextStep/p/6691292.html
Copyright © 2020-2023  润新知