并发操作
并发操作之——进程和线程间的调度算法下——线程之间的调度算法
前言
<font color=#999AAA 并发操作之——进程和线程间的调度算法。
一、协同式线程调度
线程执行时间由线程本身来控制,线程把自己的工作执行完后,要主动通知系统切换到另外一个线程上.
优点: 实现简单,且切换操作对线程自己是可知的没有线程同步的问题.
缺点: 线程执行时间不可控制,如果有一个线程有问题,可能一直阻塞在那里.
二、抢占式线程调度
每个线程由系统来分配时间,线程的切换不由线程本身来决定(Java中,Thread.yield()可以让出执行时间,但无法获取执行时间)。线程执行时间系统可控,也不会有一个线程导致整个进程阻塞
Java线程调度就是抢占式调度,优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那就随机选择一个线程
所以我们如果希望某些线程多分配一些时间,给一些线程少分配一些时间,可以通过设置线程优先级来完成。
JAVA的线程的优先级,以1到10的整数指定。当多个线程可以运行时,VM一般会运行最高优先级的线程(Thread.MIN_PRIORITY至Thread.MAX_PRIORITY)
在两线程同时处于就绪runnable状态时,优先级越高的线程越容易被系统选择执行。但是优先级并不是100%可以获得,只不过是机会更大而已。
wait是可以让出执行时间,notify后无法获取执行时间,随机等待队列里面获取而已
总结
线程之间的调度算法之抢占式调度算法和协同式调度算法。