一、多线程执行时的效果 1、多线程执行是依靠计算机的任务调度器来进行调度执行的 所以我们只能控制线程的启动而不能控制线程的执行而且计算 机系统会利用时间片来进行线程的上下文切换 2、如果电脑是单核CPU(现实中一般在虚拟机设置单核)多线程 会并发执行,执行时会导致CPU100%被占用会导致其他进程无法执行
二、线程的查看与终止 1、windows windows可以通过jps(jdk自带)命令在控制台直接看Java执行的线程信息 2、Linux 相关命令用时查看即可 3、远程监控 使用java自带监控工具jconsole
三、线程的运行原理——栈帧debug 1、线程执行时栈会给线程分配一块栈内存空间 2、线程执行方法时会给方法在线程栈内存空间内分配栈帧内存 3、一个线程只有一个活动栈帧 4、执行方法时成员变量存储在栈帧局部变量区中
四、线程运行原理-栈帧图解
五、线程上下文切换
1、发生的原因
1.1线程运行时的时间片用完了
1.2垃圾回收(所有线程暂停垃圾回收线程运行)
1.3让给优先级高的线程
1.4线程使用了wait、sleep、yield、join、lock、synchronize等方法
注:1.1-1.3为被动发生线程上下文切换,1.4为主动发生
2、Context Switch频繁发生会影响性能
3、Context Switch 发生时操作系统会保存线程的状态 恢复另一个线程的状态,相对应的概念便是程序计数器,程序计数器会保存线程下一条指令执行的地址是线程私有的
4、线程的状态包括程序计数器以及虚拟机每个栈帧的信息如局部变量表,返回地址,操作数栈,方法区