因为一下一些原因导致CPU不在执行当前的线程,转而执行另一个线程的代码。
- 1 线程的CPU时间片用完
- 2 垃圾回收
- 3 有更高级的线程需要运行
- 4 线程自己调用了 sleep yield wait join park synchtonized lock 等方法
当发生 Context Switch 切换时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态。 Java种对应的的概念就是程序计数器,它的作用是记住下一条jvm指令执行的地址,是线程私有的。
状态包括程序计数器、虚拟机栈中每个栈帧的信息,如 局部变量、操作数栈、返回地址
Context Switch 频繁发生会影响性能