zoukankan      html  css  js  c++  java
  • 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接口,就可以方便的实现资源共享
      如果一个变量是成员变量。那么多个线程对于同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的( 也就是说一个线程对成员变量的改变会影响另一个线程)。
      如果一个变量是局部变量,那么每个线程都会有一个局部变量的拷贝, 一个线程对该局部变量的改变不会影响到其他线程。
  • 相关阅读:
    Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) B. Jury Meeting 贪心
    Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) A. Planning 优先队列
    forms组件的渲染错误信息,全局和局部钩子函数,cookie,session
    ajax处理urlencoded的装饰器,ajax上传文件,分页器组件,forms组件
    初识ajax
    django之手动创建第三张表 常用字段
    django之分组,聚合,F.Q.查询
    django的多表操作
    模板的导入和继承 单标操作
    day80 django模版学习
  • 原文地址:https://www.cnblogs.com/nextStep/p/6691292.html
Copyright © 2011-2022 走看看