13.3 线程的使用

前面介绍了如何创建线程,但从前面的实例可以看到,其输出结果不尽人意。为什么呢?因为在线程的应用中存在很多新的知识点,需要大家去学习。本节将会逐个进行解释。

13.3.1 线程的优先级

线程的执行是一种抢占方式,优先级高的比优先级低的要获得更多的执行时间,如果想让一个线程比其他线程有更多的时间运行,可以通过设置线程的优先级解决。

如一个线程创建后,可通过在线程中调用“setPriority()”方法,来设置其优先级。具体方法如下:


public final void setPriority(int newPriority);


newPriority是一个1~10之间的正整数,数值越大,优先级别越高。系统有一些常数值,如下所示。

❑public final static int MIN_PRIORITY=1:表示最低优先级。

❑public final static int MAX_PRIORITY=10:表示最高优先级。

❑public final static int NORM_PRIORITY=5:表示默认优先级。

【实例13.4】下面来看一个实例,通过实例查看如果设置了线程的优先级后,程序的输出会有什么不同。


01 ///创建一个主运行类

02 ///在主运行方法中,创建两个线程,让其交替运行

03 public class thread2

04 {

05 public static void main(String[]args)

06 {

07 compute t=new compute();

08 compute1 t1=new compute1();

09 t.setPriority(10);

10 t1.setPriority(1);

11 t.start();

12 t1.start();

13 try

14 {

15 Thread.sleep(5000);//等待5秒

16 }

17 catch(InterruptedException e){}

18 }

19 }

20 ///创建compute线程类

21 ///在这个线程类中,通过循环语句输出1~10十个整型数据

22 class compute extends Thread

23 {

24 int i=0;

25 public void run()

26 {

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

28 {

29 System.out.println(i);

30 }

31 }

32 }

33 ///创建compute1线程类

34 ///在这个线程类中,通过循环语句输出说明语句

35 class compute1 extends Thread

36 {

37 public void run()

38 {

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

40 {

41 System.out.println("这个数字是:"+i);

42 }

43 }

44 }


【代码说明】因为机器运行的速度太快了,为了让程序显示的效果更加突出,代码第13~16行使用了sleep()方法,让程序等待5秒。第9~10行是分别设置两个线程的优先级。

【运行效果】


0 1

2 3

4 5

6 7

8 9

这个数字是:0

这个数字是:1

这个数字是:2

这个数字是:3

这个数字是:4

这个数字是:5

这个数字是:6

这个数字是:7

这个数字是:8

这个数字是:9


此时的输出变得很有规律,因为程序中将输出数字的线程的优先级设为最高了,而输出汉字的线程是系统最低优先级1,所以程序执行时,会给数字输出线程更多的时间执行。

说明 结果可能随机器的运算能力不同而不同。