一 上图 关系介绍。
二 线程的生命周期?
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()); } }