《Java 线程编程》学习笔记6
第六章 线程优先化
6.1 系统线程优先级
6.2 线程优先级常量
- Thread.MAX_PRIORITY:10
- Thread.MIN_PRIORITY:1
- Thread.NORM_PRIORITY:5
6.3 判断当前优先级:getPriority()
6.4 更改线程的优先级:setPriority()
- 何时 setPriority() 失效:
- 如果调用线程不允许更改优先级,调用 setPriority() 会抛出 SecurityException。仅当安装了 SecurityManager,而且它拒绝更改优先级请求时,才会发生这种情况。默认情况,应用程序没有 SecurityManager。
6.5 线程状态
线程有如下6种状态:
- 正运行
- 准备运行
- 休眠
- 等待
- 阻塞于 IO
- 阻塞于同步
线程规划器控制哪一个准备运行的线程实际运行于处理器上。任何时候,只有一个线程实际处于运行状态。所有其他线程均处于准备运行状态,等待被线程规划器选中。
线程的阻塞可以有四种情况:
- 阻塞于 sleep()
- 阻塞于 wait()
- 阻塞于 read()
- 阻塞于 synchronized 对象
6.6 优先级和规划
警告:
线程优先级给予线程规划器的一种提示,不应当用于保证程序的正确性。
应该按如下方式编写程序:不管线程的优先级如何,程序都能正确运行。
6.7 自愿放弃处理器:Thread.yield()
6.8 线程规划情形
- 情形一:一个高优先级线程独占