哪些操作可能导致线程上下文切换?

1、自发性上下文切换-主要由Java程序导致,让程序中执行一下操作的时候会导致线程自发上下文切换 sleep()、wait()、yield()、join()、park()、synchronized、lock等。

2、非自发性上下文切换一般由于线程时间片用完、虚拟机垃圾回收(STW)导致线程暂停、线程优先级导致等。

3、线程上下文切换的检测方式: vmstat 查看Java程序系统上下文切换频率, pidstat 监控指定进程上下文切换。

4、线程越多,速度不一定越快,一般简单逻辑,执行速度快使用单线程。逻辑相对复杂并且等待时间长、需要大量计算的时候,例如NIO文件读写、图像处理、大数据分析等推荐使用多线程处理。

5、多线程中使用Synchronized 会发生线程上下文切换和进程上下文切换 

参考文档:Java线程的6种状态及切换(透彻讲解)_诚-CSDN博客_java 线程状态

你可能感兴趣的:(java)