多线程优先级

来源:互联网 发布:retrofit 2.0解析json 编辑:程序博客网 时间:2024/06/08 05:23
线程优先级被调度用来判定何时每个线程允许运行。理论上,优先级高的线程比优先级低的线程获得更多的CPU时间。实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的操作系统如何更有效的利用CPU时间)。一个优先级高的线程自然比优先级低的线程优先。举例来说,当低优先级线程正在运行,而一个高优先级的线程被恢复(例如从沉睡中或等待I/O中),它将抢占低优先级线程所使用的CPU。
    理论上,等优先级线程有同等的权利使用CPU。但java是被设计成能在很多环境下工作。一些环境下实现多任务处理从本质上与其他环境不同。为安全起见,等优先级线程偶尔也受控制。这保证了所有线程在无优先级的操作系统下都有机会运行。实际上,在无优先级的环境下,多数线程任然有机会运行,因为多线程不可避免的会遭遇阻塞,例如等待输入输出。遇到这种情形,阻塞的线程挂起,其他线程运行。但是如果你希望多线程执行的顺利的话,最好不要采用这种方法。同样,有些类型的任务是占CPU的。
    设置线程的优先级,用setPriority()方法,该方法也是thread类成员。它的通常形式为:
 final void setPrority(int level)
    这里level指定了对所调用的线程的新的优先权的设置。level的值必须在MIN_PRIORITY到MAX_PRIORITY范围内。通常,它们的值分别是1和10.要返回一个线程为默认的优先级,指定NORM_PRIORITY,通常值为5.这些优先级在Thread中都被定义为final型变量。
    通过调用thread类的getPriority()方法可以获得当前的优先级设置。方法如下:
 final int getPriority()
    当设计调度时,java的执行可以有本质上不同的行为。windows的工作或多或少如你所愿,但其他版本可能工作的完全不同。大多数矛盾发生在你使用优先级行为的线程。而不是协同的腾出CPU时间,最安全的办法是获得可预见性的优先权,java获得跨平台的线程行为的方法是自动放弃对CPU的控制。
原创粉丝点击