《并发编程》--8.线程优先级

Java中的线程具有自己的优先级。优先级高的线程在竞争资源的时候更容易抢到资源。当然这只是概率的问题,如果人品不好,也会出现抢不过低优先级的情况。

由于线程的优先级调度和底层的操作系统有着密切的联系,并且也不容易预测,无法精确的控制。比如一个低优先级的线程可能一直抢不到资源,而使用无法运行,就可能产生饥饿(虽然优先级低,但也不能饿死他啊),因为在严格的情况下,需要自己的代码层解决线程调度的问题。

以下是一个线程优先级的简单demo

public class priority {
	public static class HightPriority extends Thread{//高优先级,和低优先级执行相同的代码
		static int count = 0;
		public void run(){
			while(true){
				synchronized (priority.class) {//加锁,使优先级的差异表现更加明显
					count ++;
					if(count>1000000){
						System.out.println("HightPriority线程执行完毕!!!");
						break;
					}
				}
			}
		}
	}

	public static class LowPriority extends Thread{//低优先级,和高优先级执行相同的代码
		static int count = 0;
		public void run(){
			while(true){
				synchronized (priority.class) {//加锁,使优先级的差异表现更加明显
					count ++;
					if(count>1000000){
						System.out.println("LowPriority线程执行完毕!!!");
						break;
					}
				}
			}
		}
	}
	
	public static void main(String[] args) {
		Thread hight = new HightPriority();
		LowPriority low = new LowPriority();
		hight.setPriority(Thread.MAX_PRIORITY);//内置3个静态变量之一:  MAX_PRIORITY = 10
		low.setPriority(Thread.MIN_PRIORITY);  //内置3个静态变量之一: 内置3个静态变量 MIN_PRIORITY = 1
		                                       //内置3个静态变量之一: Thread.NORM_PRIORITY = 5
		                                       //数值越大,优先级越高
		low.start();
		hight.start();
	}
}

在大多情况下,高优先级就率先执行完毕,打印出信息。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值