当前位置:首页 > 后端开发 > java多线程之线程的优先级

java多线程之线程的优先级

6个月前 (05-26)15

在操作系统中,线程可以划分优先级,优先级较高的线程得到CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务(其实并不是这样)。

在java中,线程的优先级用setPriority()方法就行,线程的优先级分为1-10这10个等级,如果小于1或大于10,则抛出异常throw new IllegalArgumentException(),默认是5。

public class MyThread1 extends Thread {
	@Override
	public void run() {
		long startTime=System.currentTimeMillis();
		long addResult=0;
		for (int i = 0; i < 1000000; i++) {
			new Random().nextInt();
			addResult+=i;
		}
		long endTime=System.currentTimeMillis();
		System.out.println("thread1 use time--->"+(endTime-startTime));
	}
}

public class MyThread2 extends Thread {
	@Override
	public void run() {
		long startTime=System.currentTimeMillis();
		long addResult=0;
		for (int i = 0; i < 1000000; i++) {
			new Random().nextInt();
			addResult+=i;
		}
		long endTime=System.currentTimeMillis();
		System.out.println("thread2 use time--->"+(endTime-startTime));
	}
}

public class MyThread{
	public static void main(String[] args){
		for (int i = 0; i < 5; i++) {
			MyThread1 t1=new MyThread1();
			t1.setPriority(10);
			t1.start();
			MyThread2 t2=new MyThread2();
			t2.setPriority(1);
			t2.start();
		}
	}
}


java多线程之线程的优先级 _ Java侠


从结果中可以发现,也有thread2比thread1先执行完,也就验证了线程的优先级于代码执行顺序无关。

public class MyThread{
	public static void main(String[] args){
		for (int i = 0; i < 5; i++) {
			MyThread1 t1=new MyThread1();
			t1.setPriority(6);
			t1.start();
			MyThread2 t2=new MyThread2();
			t2.setPriority(5);
			t2.start();
		}
	}

java多线程之线程的优先级 _ Java侠

如果我们把优先级设置近点的话,发现优先级较高的线程不一定没一次都执行完,线程的优先级与打印的顺序无关,不要将这两点的关系相关联,他们的关系是不确定性和随机性。

线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。

作者:java小酱油啊
来源链接:https://blog.csdn.net/zwz568017880/article/details/46958493

“java多线程之线程的优先级” 的相关文章

多线程处理大量数据 java

项目场景: 简述项目相关背景: 例如:获取大量数据并处理,生成execl文件导出 问题描述: 5W条数据处理后生成exe...

Java对象的四种引用

前言 在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用。也就是说,若一个对象不被任何变量引用,那么...

java判断是否为空的方法

1判断字符串或者对象为空(经常判断的两种情况) 判断为空一般是null或者是“”这两种情况,主要是通过工具StringUtils判断。 一种是...

java 字符为空

/*对比s == null || s.equals("") *    s == null || s.length()<=...

JAVA版本更换

在cmd中可以运行java,但是不能用javac 链接:http://www.zhihu.com/question/28428426/answer/...

Java设计模式之起始

Java设计模式之起始   一:写在前面        每每...

Java集合详解(非常详细!!!)

Java集合详解(非常详细!!!)

前言 数据结构作为每一个开发者不可回避的问题,而 Java 对于不同的数据结构提供了非常成熟的实现,这一个又一个实现既是面试中的难点,也是工作中必不可少的工具,在此,笔...

Java -version与配置的Path环境变量不一致

Java -version与配置的Path环境变量不一致 问题描述:     设置了环境变量JAVA_HOME为jdk1.5.0_14的安装...

Java集合 LinkedList的原理及使用

Java集合 LinkedList的原理及使用

本文基于java8从定义一个LinkList入手,逐步展开,从源码角度分析LinkedList双向链表的结构是如何构建的,同时针对其常用方法进行分析,包括get,add,remove以及...

JAVA 多线程之控制并发流程

JAVA 多线程之控制并发流程

简介 下文主要讲述控制并发流程的工具类,他们作用就是帮助我们程序员更容易得让线程之间合作,让线程之间相互配合,来满足业务逻辑,比如让线程A等待线程B执行完毕后再执行等合...