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的权重并无关系。

猜你喜欢

转载自blog.csdn.net/qq_37856300/article/details/84390879