我的参考书中是这样写的:
package cham1;
public class cham1 {
public static void main(String[]args)
{
MinThread mint=new MinThread();
MaxThread maxt=new MaxThread();
Thread mi=new Thread(mint,"低优先级线程");
Thread ma=new Thread(maxt,"高优先级线程");
mi.setPriority(1);
ma.setPriority(10);
ma.start();
mi.start();
}
}
class MinThread implements Runnable{
public void run() {
for(int i=0;i<10;i++)System.out.println("较低优先级的线程正在输出");
}
}
class MaxThread implements Runnable{
public void run() {
for(int i=0;i<10;i++)
System.out.println("较高优先级的线程正在输出");
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/97bd49884ce46025baca7e64a57a7663.png)
确实能看出是优先级高的线程线运行了
但是我把:ma.start();mi.start();两条语句调换位置后出现:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/17a116cca134ae1c37a7c73a9208281e.png)
优先级低的线程线运行了,其实这里线程执行体较短(只有一小段循环),因而先开启的线程线运行了。
我进行了下面一些改进,把线程执行体该成了无限循环时,我们可以看到,程序一直运行并且一直运行优先级高的线程。并且和那个线程先打开没有关系。
package cham1;
public class cham1 {
public static void main(String[]args)
{
MinThread mint=new MinThread();
MaxThread maxt=new MaxThread();
Thread mi=new Thread(mint,"低优先级线程");
Thread ma=new Thread(maxt,"高优先级线程");
mi.setPriority(1);
ma.setPriority(6);
mi.start();
ma.start();
}
}
class MinThread implements Runnable{
public void run() {
while(true)System.out.println("较低优先级的线程正在输出");
}
}
class MaxThread implements Runnable{
public void run() {
while(true)
System.out.println("较高优先级的线程正在输出");
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d4f586b7e70996ae83c8b64dcf014bfc.png)