抢占式调度:
抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某 种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长, 甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。
协同式调度:
协同式调度指某一线程执行完后主动通知系统切换到另一线程上执行,这种模式就像接力赛一 样,一个人跑完自己的路程就把接力棒交接给下一个人,下个人继续往下跑。线程的执行时间 由线程本身控制,线程切换可以预知,不存在多线程同步问题,但它有一个致命弱点:如果一 个线程编写有问题,运行到一半就一直堵塞,那么可能导致整个系统崩溃。
JVM的实现:
JVM规范中规定每个线程都有优先级,且优先级越髙越优先执行,但优先级高并不代表能独自 占用执行时间片,可能是优先级高得到越多的执行时间片,反之,优先级低的分到的执行时间 少但不会分配不到执行时间。
java使用的线程调度式抢占式调度
Java中线程会按优先级分配CPU时间片运行
线程让出cpu的情况:
1、 当前运行线程主动放弃CPU, JVM暂时放弃CPU操作(基于时间片轮转调度的JVM操作系 统不会让线程永久放弃CPU,或者说放弃本次时间片的执行权),例如调用yield。方法。
2、 当前运行线程因为某些原因进入阻塞状态,例如阻塞在I/O上。
3、 当前运行线程结束,即运行完run()方法里面的任务。
Was this helpful?
0 / 0