一段程序解释JAVA线程优先级的问题

我的参考书中是这样写的:

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("较高优先级的线程正在输出");
	}
}

在这里插入图片描述

确实能看出是优先级高的线程线运行了

但是我把:ma.start();mi.start();两条语句调换位置后出现:

在这里插入图片描述

优先级低的线程线运行了,其实这里线程执行体较短(只有一小段循环),因而先开启的线程线运行了。

我进行了下面一些改进,把线程执行体该成了无限循环时,我们可以看到,程序一直运行并且一直运行优先级高的线程。并且和那个线程先打开没有关系。

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("较高优先级的线程正在输出");
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值