zoukankan      html  css  js  c++  java
  • 线程的生命周期 介绍

    一  上图 关系介绍。

    二  线程的生命周期?

    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());
        }
        
    }

  • 相关阅读:
    android webview内存泄露解决方法
    使用adb安装遇到的一些坑
    androidstudio在创建new project时,窗口太大,看不到下面确定按钮的解决方法
    android切换前后台状态监听
    android设置系统横屏方案
    android判断adb调试是否打开及代码跳转到开发者选项界面
    xml布局解析报错的可能原因
    Android:防止过快点击造成多次事件 问题
    android Information:Gradle tasks [:dl_version:generateDebugSources, :dl_version:generateDebugAndroidTestSources导致无法实现Preview功能
    Android定位服务关闭和定位(悬浮)等权限拒绝的判断
  • 原文地址:https://www.cnblogs.com/ZXF6/p/14081887.html
Copyright © 2011-2022 走看看