首页 > 技术文章 > 线程的生命周期 介绍

ZXF6 2020-12-04 09:48 原文

一  上图 关系介绍。

 

二  线程的生命周期?

package com.aaa.threaddemo;

/*
 *一  线程的生命周期是什么?
 *         一个线程从生到死的过程。
 * 
 *二      什么样的周期,具体的过程是啥?
 *        新建        new 创建一个线程后,处于新建状态,jvm 为其分配内存,并初始化成员变量的值。
 *
 *        就绪        当线程调用了start方法,此时为就绪状态,jvm 为其创建方法调用栈和程序计数器,等待调度运行
 *
 *        运行        就绪状态的线程获得了CPU, 开始执行run方法线程执行体, 此时为运行状态
 *
 *        阻塞        blocked 为什么阻塞?
 *                线程暂时放弃了CPU的使用权,停止运行。 等到线程进入可运行状态,才有机会再次使用CPU
 *
 *                阻塞分为三种情况?
 *                1 等待阻塞  线程执行wait方法,jvm 把它放入到等待队列 waitting queue
 *                2 同步阻塞  A线程在获取对象的同步锁时,若该同步锁被别的B线程占用。 jvm 会把A线程放入锁池  lock pool
 *                3 其他阻塞  线程执行 sleep 或者 join 方法,或者是发出io请求  jvm 把线程设置为阻塞状态。 
 *                          执行完毕后,线程进入runnable状态。
 *                
 *        死亡        线程三种结束方式,结束后就是死亡状态
 *                1 正常结束    run call方法执行完毕
 *                2 异常结束    线程抛出未捕获的异常,错误。
 *                3 调用stop结束线程,容易导致死锁。已经被废弃。
 *            
 *
 *三  为什么有阻塞,就不能运行完毕,接受死亡?
 *        因为CPU的关系
 *
 *四      CPU和线程有啥关系?    CPU是啥?        线程和进程有啥关系?  【简单介绍】 
 *        CPU是计算机的运算和控制核心!对各个应用程序进行统一协调和控制!
 *          
 *        线程隶属于进程,进程是一个应用程序。  所以线程受制于CPU。
 *
 *五      不同的CPU对线程的影响?   并行和并发的区别?
 *        1 单CPU  同一时间,只能执行一个线程!
 *
 *        2 单CPU 多任务状态。在【1秒的时间内】执行多个任务,快速的切换。CPU的速度是很快的,人的感知无法和其相提并论。
 *          我们会觉得是很多任务 “同时” 执行。    【并发    并发允许两个任务彼此干扰。】

 *          但有时候,我们也能感受到电脑卡顿,  1.说明你的电脑运行了很多任务,任务越多,切换消耗的时间也就越多。  2. 电脑自身问题,换一个高配的。
 *        
 *        3 多CPU 同一时间,可以同时运行多个线程! 【并行  两个任务在同一时刻互不干扰的同时执行。】
 *        
 *六  多线程为何存在?
 *        单核的CPU也是十分强大的,只让它去做一件事情,是对资源的浪费!
 *        多线程是计算机多种资源的并行。
 * 
 * 
 */
public class ThreadCycle {
    public static void main(String[] args) throws InterruptedException {
        //new  新建
        Threadlife threadlife = new Threadlife();
        
        //其他阻塞
        threadlife.sleep(3000);
        
        //就绪状态  获得CPU后 执行run方法,执行完毕后,线程死亡。
        threadlife.start();                
    }

}

class Threadlife extends Thread{
    @Override
    public void run() {
        System.out.println("当前运行的线程" + Thread.currentThread().getName());
    }
    
    {
        System.out.println("new 一个 threadlife, 执行构造方法,查看运行的线程,应该是主方法。 ");
        System.out.println(Thread.currentThread().getName());
    }
    
}

 

 

 

 

 

 

推荐阅读