技术开发 频道

java线程学习总结

  3. Java线程调度

  3.1 Java优先级

  java的优先级别共有10种,加上虚拟机自己使用的优先级别=0这种,总共11种。

  大多数情况来说,java线程的优先级设置越高(最高=10),那线程越优先运行。

  3.2. 绿色线程

  线程运行在虚拟机内,操作系统根本不知道这类线程的存在。

  线程是由虚拟机调度的。

  3.3 本地线程

  线程是由运行虚拟机的操作系统完成的。

  3.4 Windows本地线程

  操作系统,完全能够看得到虚拟机内的每一个线程,同时虚拟机的线程和操作系统的线程是一一对应的。Java的线程调度室由操作系统底层线程决定的。

  在win32平台下,windows线程只有6个优先级别。和java线程优先级别对应如下:

  Java线程优先级 Windows 95/nt/2000线程优先级

  0 THREAD_ PRIORITY_IDLE

  1(Thread.MIN_PRIORITY) THREAD_ PRIORITY_LOWEST

  2 THREAD_ PRIORITY_LOWEST

  3 THREAD_ PRIORITY_BELOW_NORMAL

  4 THREAD_ PRIORITY_BELOW_NORMAL

  5 (Thread.NORM_PRIORITY) THREAD_ PRIORITY _NORMAL

  6 THREAD_ PRIORITY _ABOVE_NORMAL

  7 THREAD_ PRIORITY _ABOVE_NORMA

  8 THREAD_ PRIORITY _HIGHEST

  9 THREAD_ PRIORITY _HIGHEST

  10 (Thread.MAX_PRIORITY) THREAD_ PRIORITY _CRITICAL

  3.5线程优先级倒置与继承

  如果一个线程持有锁(假设该线程名字=ThreadA,优先级别=5),另外一个线程(假设该线程名字=ThreadB,优先级别=7),现在该线程(ThreadA)处于运行状态,但是线程ThreadB申请需要持有ThreadA所获得的锁,这时候,为了避免死锁,线程A提高其运行的优先级别(提高到ThreadB的优先级别=7),而线程ThreadB为了等待获得锁,降低线程优先级别(降低到ThreadA原来的优先级别=5).

  上述的这种情况,对于ThreadA,继承了ThreadB的优先级别,这成为优先级别的继承;对于ThreadB暂时降低了优先级别,成为优先级别的倒置。

  当然,一旦线程ThreadA持有的锁释放了,其优先级别也会回到原来的优先级别(优先级别=5)。线程ThreadB获得了相应的锁,那优先级别也会恢复到与原来的值(优先级别=7)。

  3.6循环调度

  具有同样优先级的线程相互抢占成为循环调度。

0
相关文章