理解线程上下文切换
线程的执行需要CPU资源,每个CPU同一时刻只能被一个线程使用,为了让用户感觉多个线程是在同时执行的,CPU资源采用了时间片轮转的策略,也就是给每个线程分配一个时间片,线程在时间片内占用CPU执行任务。当线程使用完时间片之后,如果还未结束,就会处于就绪状态并让出CPU给其他线程使用,这就是上下文切换,从当前线程的上下文切换到其它线程。
思考一个问题,让出CPU的线程当下次轮到自己占用CPU时间片的时候如何知道自己之前运行到哪里了?所以在切换线程上下文的时候需要保存当前线程的执行现场,当再次执行时根据保存的执行现场信息恢复执行现场。
线程上下文切换的时机:当前线程的CPU时间片使用完处于就绪状态时;当前线程被其它线程中断的时候。
摘自:《Java并发编程之美》