多线程(三)线程控制之线程优先级

多线程(三)线程控制之线程优先级

原创  2016年08月14日 13:20:36

每个线程执行时都具有一定的优先级,优先级高的线程获得较多的执行机会,而优先级低的线程则获得较少的执行机会。

每个线程默认的优先级都与创建它的父线程的优先级相同,在默认情况下,main线程具有普通优先级,由main线程创建的子线程也具有普通优先级。

Thread类提供了setPriority(int newPriority)、getPriority()方法来设置和返回指定线程的优先级,其中setPriority()方法的参数可以是一个整数,范围是1~10之间,也可以使用Thread类的如下三个静态常量。

A、MAX_PRIORITY:其值是10。

B、MIN_PRIORITY:其值是1。

C、NORM_PRIORITY:其值是5。

[java]  view plain  copy
  1. package gblw.fisrt;  
  2.   
  3. public class PriorityTest extends Thread{  
  4.     //定义一个有参构造器函数,用于创建线程时指定name  
  5.     public PriorityTest(String name){  
  6.         super(name);  
  7.     }  
  8.       
  9.     public void run(){  
  10.         for(int i=0;i<50;i++){  
  11.             System.out.println(getName()+",其优先级是:"+getPriority()+",循环变量的值为:"+i);  
  12.         }  
  13.     }  
  14.       
  15.     public static void main(String[] args) {  
  16.         //改变主线程的优先级  
  17.         Thread.currentThread().setPriority(6);  
  18.         for(int i=0;i<30;i++){  
  19.             if(i==10){  
  20.                 PriorityTest low=new PriorityTest("低级");  
  21.                 low.start();  
  22.                 System.out.println("创建之初的优先级:"+low.getPriority());  
  23.                 //设置该线程为最低优先级  
  24.                 low.setPriority(Thread.MIN_PRIORITY);  
  25.             }  
  26.             if(i==20){  
  27.                 PriorityTest high=new PriorityTest("高级");  
  28.                 high.start();  
  29.                 System.out.println("创建之初的优先级:"+high.getPriority());  
  30.                 //设置该线程为最低优先级  
  31.                 high.setPriority(Thread.MAX_PRIORITY);  
  32.             }  
  33.         }  
  34.     }  
  35. }  


注意:虽然Java提供了10个优先级级别,但这些优先级别需要操作系统支持。遗憾的是,不同操作系统上的优先级并不相同,而且也不能很好的和Java的10个优先级对应,例如Windows2000仅提供了7个优先级。因此应该尽量避免直接为线程指定优先级,而应该使用MAX_PRIORITY、MIN_PRIORITY和NORM_PRIORITY三个静态常量来设置优先级,这样 才可以保证程序具有最好的可移植性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值