Java中的线程调度分为两种:时间片轮转和优先级。时间片轮转就是操作系统轮流给每个线程分配一定时间的CPU运行时间。而优先级是指在时间片轮转的基础上,为每个线程设置一个优先级,根据线程的优先级来分配CPU的执行时间。Java中线程的优先级可以用数字1-10来表示,数字越高,优先级越高。Java中分为4个优先级,从高到低分别是:
1. MAX_PRIORITY(10) 2. NORM_PRIORITY(5) 3. MIN_PRIORITY(1) 4. 没有优先级的设定(default)
一般情况下,线程继承了父线程的优先级,如果不设置,则默认为NORM_PRIORITY。线程的优先级设置一般不太建议使用,因为优先级与CPU性能、系统运行状态等因素都有关系,不同的系统环境下表现可能不同,而且过渡使用优先级可能导致线程饥饿现象,影响程序性能。
Java中线程的优先级其实只是给操作系统的一个建议,无法保证线程一定会按照优先级执行,而是线程调度器会尽可能的遵循优先级原则。给多个线程设置不同的优先级,在较短时间内,可能会看到优先级较高的线程先执行。但如果实现了阻塞,优先级的作用就会减弱,甚至无法保证执行的顺序。