java设置线程优先级的误区

对线程有一些了解的读者知道,在线程中,我们可以通过线程的setPriority()方法来设置线程的优先级,方法的参数是一个整型值,可以填写从1~10的值。当我们创建线程的时候,java默认给线程设置的优先级是5,1为最低优先级,10为最高优先级。下面的例子创建了a,b两个线程并给它们设置了优先级:

public static void main(String[] args) {
		Thread a=new Thread(new Runnable() {
			@Override
			public void run() {
				for(int i=0;i<10;i++)
				{
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("a");
				}
				System.out.println("a线程执行完毕");
			}
		});
		Thread b=new Thread(new Runnable() {
			@Override
			public void run() {
				for(int i=0;i<10;i++)
				{
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println("b");
				}
				System.out.println("b线程执行完毕");
			}
		});
		a.setPriority(1);
		b.setPriority(10);
		a.start();
		b.start();
	}

误区

那么,我们很容易就以为,线程的优先级是线程从cpu手里抢到资源的权重,认为优先级越高的线程越容易在线程竞争中获胜,这是初学者的一个误区。

例如,刚刚上面的代码给a线程设置了最低优先级,给b线程设置了最高优先级,按照错误的想法,a线程更容易抢到资源,那么在同一时间内打印出的a字母应该比b多,可事实结果是什么呢?
在这里插入图片描述
多实验几次,我们会发现,优先级和线程抢到资源的概率并没有关系,而是在有多个线程的时候,用来设置一上来从哪个线程开始执行的优先级的,和之后抢夺cpu的权重并无关系。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值