Java线程分析

线程的内存

与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储 局部变量表、操作数栈、动态连接、方法出口 等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

线程间的数据访问

CPU的三级缓存描述了虚拟机栈的大小。线程需要读取主内存数据时,需要将数据从主内存读取到高速缓冲区,CPU三级缓存的大小决定了高速缓冲区的空间大小。a线程访问b线程的数据M时,是先在主内存中copy了一份M数据的副本,a线程通过主内存读取。1核CPU同时只能执行1个线程。

线程的生命周期

NEW :当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动),线程对象的start方法只能调用一次,否则报错:IllegalThreadStateException
RUNNABLE:就绪状态,线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源(此时已经调用start方法,该线程并没有运行)
BLOCKED:阻塞状态,由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。(阻塞状态只能先进入就绪状态,不能直接进入运行状态)
WAITING:等待状态,当线程处于运行过程时,调用了wait()方法,此时JVM把当前线程存在对象等待池中.
TIMED_WAITING:计时等待状态,
当线程处于运行过程时,调用了wait(long time)方法,此时JVM把当前线程存在对象等待池中.
当前线程执行了sleep(long time)方法
TERMINATED:终止状态,通常称为死亡状态,表示线程终止.
正常执行完run方法而退出(正常死亡)
遇到异常而退出(出现异常之后,程序就会中断)(意外死亡)

线程的启动过程

在Android系统中,Java线程本质是Linux线程


image.png

最终会初始化一个8K的大小,并创建一个Linux线程

你可能感兴趣的:(Java线程分析)