中华考试网·阅读新闻
编程开发 > JAVA > 文章内容

java基础知识总结(7)

2016-1-11编辑:ljnbset

线程优先级

        在日常生活中,例如火车售票窗口等经常可以看到“XXX优先”,那么多线程编程中每个线程是否也可以设置优先级呢?

        在多线程编程中,支持为每个线程设置优先级。优先级高的线程在排队执行时会获得更多的CPU执行时间,得到更快的响应。在实际程序中,可以根据逻辑的需要,将需要得到及时处理的线程设置成较高的优先级,而把对时间要求不高的线程设置成比较低的优先级。

        在Thread类中,总计规定了三个优先级,分别为:

l MAX_PRIORITY——最高优先级

l NORM_PRIORITY——普通优先级,也是默认优先级

l MIN_PRIORITY——最低优先级

在前面创建的线程对象中,由于没有设置线程的优先级,则线程默认的优先级是NORM_PRIORITY,在实际使用时,也可以根据需要使用Thread类中的setPriority方法设置线程的优先级,该方法的声明为:

         public final void setPriority(int newPriority)

假设t是一个初始化过的线程对象,需要设置t的优先级为最高,则实现的代码为:

         t. setPriority(Thread. MAX_PRIORITY);

这样,在该线程执行时将获得更多的执行机会,也就是优先执行。如果由于安全等原因,不允许设置线程的优先级,则会抛出SecurityException异常。

下面使用一个简单的输出数字的线程演示线程优先级的使用,实现的示例代码如下:

         package priority;

/**

 *测试线程优先级

 */

public class TestPriority {

         public static void main(String[] args) {

                   PrintNumberThread p1 = new PrintNumberThread("高优先级");

                   PrintNumberThread p2 = new PrintNumberThread("普通优先级");

                   PrintNumberThread p3 = new PrintNumberThread("低优先级");

                   p1.setPriority(Thread.MAX_PRIORITY);

                   p2.setPriority(Thread.NORM_PRIORITY);

                   p3.setPriority(Thread.MIN_PRIORITY);

                   p1.start();

                   p2.start();

                   p3.start();

         }

}

package priority;

/**

 *输出数字的线程

 */

public class PrintNumberThread extends Thread {

         String name;

         public PrintNumberThread(String name){

                   this.name = name;

         }

         public void run(){

                   try{

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

                                     System.out.println(name + ":" + i);

                            }

                   }catch(Exception e){}

         }

}

程序的一种执行结果为:

高优先级:0

高优先级:1

高优先级:2

普通优先级:0

高优先级:3

普通优先级:1

高优先级:4

普通优先级:2

高优先级:5

高优先级:6

高优先级:7

高优先级:8

高优先级:9

普通优先级:3

普通优先级:4

普通优先级:5

普通优先级:6

普通优先级:7

普通优先级:8

普通优先级:9

低优先级:0

低优先级:1

低优先级:2

低优先级:3

低优先级:4

低优先级:5

低优先级:6

低优先级:7

低优先级:8

低优先级:9

        在该示例程序,PrintNumberThread线程实现的功能是输出数字,每次数字输出之间没有设置时间延迟,在测试类TestPriority中创建三个PrintNumberThread类型的线程对象,然后分别设置线程优先级是最高、普通和最低,接着启动线程执行程序。从执行结果可以看出高优先级的线程获得了更多的执行时间,首先执行完成,而低优先级的线程由于优先级较低,所以最后一个执行结束。

        其实,对于线程优先级的管理主要由系统的线程调度实现,较高优先级的线程优先执行,所以可以通过设置线程的优先级影响线程的执行。
java基础知识总结(6)
咨询热线:4000-525-585(免长途费)