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,所以程序执行时,会给数字输出线程更多的时间执行。
说明 结果可能随机器的运算能力不同而不同。