0 0

关于Java中进程中的优先级的一点疑问5

public class BasicThreadTest extends Thread{
	private String _name;
	public BasicThreadTest(String name){
		_name = name;
	}
	
	public void run(){
		try{
			for(int i = 0; i < 30; i++){
				System.out.println("run ... " + _name + " ... " + i);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	public static void main(String[] args){
		BasicThreadTest th1 = new BasicThreadTest("A");
		th1.setPriority(7);
		th1.start();
		
		BasicThreadTest th2 = new BasicThreadTest("B");
		System.out.println(th2.getPriority());
		th2.start();
	}
}

 

在上述代码中,为线程A设置优先级为7,而线程B优先级默认为5。线程A的优先级高于线程B,理论上讲,应该改是A全部执行完成之后,才能执行B。但是实际运行结果为什么是这样的呢?

5
run ... A ... 0
run ... A ... 1
run ... A ... 2
run ... A ... 3
run ... A ... 4
run ... A ... 5
run ... A ... 6
run ... A ... 7
run ... A ... 8
run ... B ... 0
run ... A ... 9
run ... B ... 1
run ... A ... 10
run ... A ... 11
run ... A ... 12
run ... A ... 13
run ... A ... 14
run ... B ... 2
run ... A ... 15
run ... A ... 16
run ... B ... 3
run ... B ... 4
run ... B ... 5
run ... B ... 6
run ... A ... 17
run ... B ... 7
run ... A ... 18
run ... B ... 8
run ... A ... 19
run ... B ... 9
run ... A ... 20
run ... B ... 10
run ... A ... 21
run ... B ... 11
run ... A ... 22
run ... B ... 12
run ... A ... 23
run ... B ... 13
run ... A ... 24
run ... B ... 14
run ... A ... 25
run ... B ... 15
run ... A ... 26
run ... B ... 16
run ... A ... 27
run ... B ... 17
run ... A ... 28
run ... B ... 18
run ... A ... 29
run ... B ... 19
run ... B ... 20
run ... B ... 21
run ... B ... 22
run ... B ... 23
run ... B ... 24
run ... B ... 25
run ... B ... 26
run ... B ... 27
run ... B ... 28
run ... B ... 29

 

多运行几次的结果有时会在线程A全部执行之后,线程B再执行;有时会出现交错的情况。

 

不是很理解优先级在这里好像没体现出作用,为什么呢?


问题补充:如果在run方法for循环中添加Thread.sleep(500),为什么结果一定是线程A和线程B交错执行呢?
2013年8月05日 15:01

8个答案 按时间排序 按投票排序

0 0

采纳的答案

这个在深入理解jvm中有介绍,具体数字记不清,原理是这样的,jvm为线程提供了大概9个优先级,但是不同的操作系统提供的优先级等级也不同,windows没到9个,linux比较多,solaris比linux还要多,而且线程或进程的调度是交由操作系统cpu调度策略调度的,如果你是windows操作系统,假如它只提供了两种优先级,那么你设置的jvm优先级1~4可能映射到操作系统的1优先级,而5~9映射到操作系统的2优先级,所以1~4的效果是一样的,5~9的效果是一样的。
这个问题在深入理解jvm中,多线程优化那部分有介绍!

2013年8月05日 20:09
0 0

首先,标题就有错,你问的是线程的优先级。
其次,程序中不能依靠设定线程优先级的高低来确定线程先后的执行顺序,因为这个最终是由操作系统调度实现的,一般操作系统不会保证优先级高的线程一定在优先级低的线程之前执行。

2013年8月06日 10:22
0 0

如果公司的厕所有3个坑,这时候大boss和一个普通员工同时进入厕所,不用考虑什么职位高低,一起进去爽吧,但是如果大boss和5个普通员工同时进入厕所,我猜肯定是让大boss先选一个舒服的坑吧,然后其他5个员工pk剩下的2个坑

2013年8月06日 09:16
0 0

线程的优先级高的线程比线程优先级低的线程将获得更多CPU时间,但不代表优先级高的一定比优先级低的先执行完。

2013年8月05日 17:40
0 0

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

2013年8月05日 16:21
0 0

所谓优先级并不是指线程执行的顺序,一般可认为是CPU时间片的分配大小。

2013年8月05日 16:10
0 0

只有当系统资源被其它程序所占用完,没有释放的时候,线程才会考虑优先级,才会让级别越高的越先执行。资源充足的时候不没有优先级的概念的。

2013年8月05日 15:30
0 0

优先级只是在竞争资源时有优先的作用,没有资源竞争,当然什么都看不出来

2013年8月05日 15:17

相关推荐

    java9中文API

    2. Process API增强:Java 9对`java.lang.Process`类进行了增强,提供了更强大的进程管理能力,如读取进程的输出流,控制进程的优先级等,使开发者能更好地控制运行的外部程序。 3. 引入HTTP/2客户端:Java 9引入了...

    操作系统 实验指导手册

    - **内容**:学习和实现不同的进程调度算法,如优先级调度、时间片轮转等,分析其优劣。 通过上述实验,学生将在实践中加深对操作系统原理的理解,培养解决实际问题的能力,为未来在计算机软硬件开发领域的职业发展...

    上海交通大学软件学院_操作系统课程_实验内含源码和运行说明书.zip

    文档中可能会涉及操作系统的核心概念,如进程管理、内存管理、文件系统、I/O设备控制等。 "code"文件夹则包含了实际的源代码,可能是用C、C++或Java等编程语言编写。通过阅读和分析这些代码,学生可以直观地了解...

    PhD_Thesis_Cristina_Pinneri.pdf

    PhD_Thesis_Cristina_Pinneri

    Git知识学习(尚硅谷)

    Git知识学习(尚硅谷)

    套筒机械加工工艺规程制订设计.rar

    套筒机械加工工艺规程制订设计.rar

    The First Adventures on Differential Geometry 9789811296178.pdf

    The First Adventures on Differential Geometry 9789811296178

    汽车防误踏油门机构的设计.zip

    汽车防误踏油门机构的设计.zip

    汽车离合器设计.zip

    汽车离合器设计.zip

    基于SpringBoot的文学创作社交论坛(源码+数据库+万字文档+ppt)533

    基于SpringBoot的文学创作社交论坛,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 1. **首页:** 浏览社交论坛的主要信息。 2. **火车信息:** 阅读和浏览用户发布的文学创作。 3. **公告资讯:** 查看社交论坛发布的重要通知和公告。 4. **后台管理:** - **首页:** 进行后台管理相关操作。 - **个人中心:** 管理个人信息,查看火车票订购历史等。 - **车票预订管理:** 预订文学创作,选择特定的创作者或主题。 - **车票退票管理:** 处理用户对已预订文学创作的退票请求。 5. **个人中心:** 管理个人信息。 【管理员功能】 1. **首页:** 查看社交论坛整体概况。 2. **个人中心:** 修改密码、管理个人信息。 3. **用户管理:** 审核和管理注册用户的信息。 4. **火车类型管理:** 管理文学创作的分类信息。 5. **火车信息管理:** 监管和管理社交论坛上的文学创作信息。 6. **车票预订管理:** 查看和管理用户的文学创作预订情况。 7. **车票退票管理:** 处理用户对已预订文学创作的退票请求。 8. **系统管理:** - **公告资讯:** 发布、编辑和删除系统的通知和公告。 - **关于我们:** 编辑和更新社交论坛的介绍。 - **系统简介:** 提供社交论坛的简要介绍。 - **轮播图管理:** 管理社交论坛首页的轮播图。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库

    数控铣床主轴箱设计.zip

    数控铣床主轴箱设计.zip

    某电镀废水工艺流程及平面布置图.zip

    某电镀废水工艺流程及平面布置图.zip

    joblib-0.9.0b4-py2.7.egg

    该资源为joblib-0.9.0b4-py2.7.egg,欢迎下载使用哦!

    价值60元的带会员和后台版的域名防红1.19最新免授权开心版

    管理会员制度渠道,掌管多种服务,黑白名单管理邮箱配置生成提醒发送对接易支付进行交易,订单列表,带有各种短网址功能提供接口对接,实现短网址+防红两不误,可自定义多中转域名,自动识别安全网址各种防红数据后台可显,自定义跳转网站 用户端android-ios 会员制度享受,自定义跳转网站,在线充值,我的生成,在线生成,为你的网址提供保护短网址列表接口文档数据显示,编辑我的生成 防红效果全网 在短网址与防红的前提下,为你的网站提供SEO服务以及腾讯相关网站检测的优化 贴吧+短视频平台+ios+android+pc皆正常 安装:上传源码,访问安装。提示授权时,随意填写 6位数字即可

    joblib-0.9.0b3.tar.gz

    该资源为joblib-0.9.0b3.tar.gz,欢迎下载使用哦!

    实时操作系统毕业设计项目内含说明书.zip

    实时操作系统毕业设计项目内含说明书.zip

    python相关学习资源,python

    python

    塑料瓶自动封口机设计.rar

    塑料瓶自动封口机设计.rar

    CarPlay 系统功能介绍,比较专业的文档,告诉我们开发Carplay的时候需要遵循的规则

    内容概要:本文介绍了苹果公司在WWDC19上发布的CarPlay系统的最新进展,主要包括四个方面的改进:不规则形状显示屏支持、多屏显示支持、动态屏幕尺寸调整以及“嘿,Siri”语音助手集成。不规则形状显示屏支持允许开发者为CarPlay定义交互区域,确保内容适应各种非矩形屏幕。多屏显示支持使车辆可以在多个屏幕上同时展示CarPlay界面,如中心控制台和仪表盘,提供导航、音乐播放等不同内容,并支持独立的夜间模式。动态屏幕尺寸调整功能让CarPlay界面可以实时调整大小,以适应不同的驾驶环境或用户需求。最后,“嘿,Siri”功能让用户可以通过语音唤醒Siri,即使在播放音乐时也能无缝交互,系统内置了持续的回声消除和降噪处理,确保语音识别的准确性。; 适合人群:汽车制造商、软件开发者以及对车载信息系统感兴趣的科技爱好者。; 使用场景及目标:①汽车制造商可以根据新的CarPlay特性优化车内娱乐和导航系统的用户体验;②开发者可以利用这些新特性创建更加丰富的车载应用程序;③科技爱好者可以了解最新的车载技术发展趋势。; 其他说明:文档详细描述了CarPlay系统的技术细节,包括语音活动检测器、关键词检测器、回声消除和降噪等功能的工作原理,以及车辆系统的要求,如始终开启的麦克风输入流处理、连续回声消除和降噪等。更多相关信息可参考苹果开发者网站。

    蓝桥杯第十六届省赛真题!

    内容概要:本文档为第十六届蓝桥杯单片机设计与开发项目省赛的程序设计试题说明,面向大学组。文档详细规定了比赛的基本要求、硬件配置、功能描述、性能要求、输出控制、显示功能、按键功能及初始状态。参赛者需要使用指定的单片机竞赛实训平台,完成环境温度、光强、物体运动状态的检测,并通过数码管、LED指示灯、继电器等实现相应的数据显示、状态指示与控制功能。所有程序需在Keil环境下开发,并按要求提交工程文件。 适合人群:具有单片机编程基础的大专院校学生或相关专业技术人员。 使用场景及目标:①掌握单片机编程技能,熟悉传感器数据采集与处理;②学会通过数码管、LED、继电器等实现人机交互界面的设计与实现;③提高对硬件资源的有效利用能力,确保系统的实时性和稳定性。 阅读建议:此资源旨在帮助参赛者理解比赛规则和技术要求,建议仔细阅读各项功能的具体实现细节,特别注意硬件配置、性能指标以及提交规范的要求。同时,在实际操作中要严格按照文档中的规定进行开发和测试,确保作品符合评分标准。

Global site tag (gtag.js) - Google Analytics