您的位置:首页 > 其它

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

2017-12-28 10:50 225 查看


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

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

1272

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

每个线程默认的优先级都与创建它的父线程的优先级相同,在默认情况下,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

package gblw.fisrt;  

  

public class PriorityTest extends Thread{  

    //定义一个有参构造器函数,用于创建线程时指定name  

    public PriorityTest(String name){  

        super(name);  

    }  

      

    public void run(){  

        for(int i=0;i<50;i++){  

            System.out.println(getName()+",其优先级是:"+getPriority()+",循环变量的值为:"+i);  

        }  

    }  

      

    public static void main(String[] args) {  

        //改变主线程的优先级  

        Thread.currentThread().setPriority(6);  

        for(int i=0;i<30;i++){  

            if(i==10){  

                PriorityTest low=new PriorityTest("低级");  

                low.start();  

                System.out.println("创建之初的优先级:"+low.getPriority());  

                //设置该线程为最低优先级  

                low.setPriority(Thread.MIN_PRIORITY);  

            }  

            if(i==20){  

                PriorityTest high=new PriorityTest("高级");  

                high.start();  

                System.out.println("创建之初的优先级:"+high.getPriority());  

                //设置该线程为最低优先级  

                high.setPriority(Thread.MAX_PRIORITY);  

            }  

        }  

    }  

}  

注意:虽然Java提供了10个优先级级别,但这些优先级别需要操作系统支持。遗憾的是,不同操作系统上的优先级并不相同,而且也不能很好的和Java的10个优先级对应,例如Windows2000仅提供了7个优先级。因此应该尽量避免直接为线程指定优先级,而应该使用MAX_PRIORITY、MIN_PRIORITY和NORM_PRIORITY三个静态常量来设置优先级,这样
才可以保证程序具有最好的可移植性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: