谈谈你对Java线程调度模型的理解。
答:计算机通常只有一个CPU,在任意的时刻只能执行一条机器指令,每个线程只能获得CPU的使用权才能执行指令。所谓多线程的并发运行,其实是指从宏观上看,每个线程轮流获得CPU的使用权,分别执行各自的任务。在运行池中,会有多个处于就绪状态的线程在等待CPU,Java虚拟机的一项任务就是负责线程的调度。线程的调度是指按照特定的机制为多个线程分配CPU的使用权。一般存在两种不同的调度模型,分别为:分时调度模型和抢占式调度模型。
其中,Java虚拟机采用的是抢占式调度模型,也就是说优先让高优先级的线程使用CPU,如果可运行池中线程的优先级相同,则就会随机选择一个线程让其使用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。一个线程会因为以下原因而放弃CPU:
(1)Java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其他线程获得运行机会。
(2)当前线程因为某些原因而进入阻塞状态。
(3)线程运行结束。
一个线程的调度,不仅仅与Java虚拟机有关,而且与运行Java虚拟机的操作系统有很大关系。不同的操作系统对线程的调度策略是有区别的。Java线程的调度不是分时的,同时启动多个线程,不能保证各个线程轮流获得相等的CPU使用时间。
知识扩展:如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下措施之一:
(1)调整各个线程的优先级。提高需要优先执行的线程的级别。Thread类的setPriority(int)和getPriority()方法分别用来设置优先级和读取优先级。优先级用整数表示,取值范围1~10,Thread类有三个静态常量,最高优先级(MAX_PRIORITY -- 10)、最低优先级(MIN_PRIORITY -- 1)和默认优先级(NORM_PRIORITY -- 5)。
(2)让处于运行状态的线程调用Thread.sleep()方法,主动让出CPU的使用时间。
(3)让处于运行状态的线程调用Thread.yield()方法。
(4)让处于运行状态的线程调用另一个线程的join()方法。
另外,尽管Java提供了10个优先级,但它与多数操作系统都不能很好地映射。例如,Windows 2000中只有7个优先级,并且是不固定的,而Sun公司的Solaris操作系统总共有2的31次方个优先级。如果希望程序能够一直到不同的操作系统上还能保持线程设置的优先级不变,只能使用MAX_PRIORITY、MIN_PRIORITY和NORM_PRIORITY这三个优先级。这样才能保证在不同的操作系统中,对同样优先级的线程采用了同样的调度方式。
分享到:
相关推荐
java 面试java 面试java 面试java 面试java 面试
【标题】:“日语java面试问题集”揭示了在针对日本客户的Java外包项目中,面试者可能遇到的技术和语言双重要求。这类面试通常旨在测试应聘者的Java编程基础、问题解决能力,以及与日本客户沟通的技能。 【描述】:...
JAVA面试资料JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA面试资料 JAVA...
JAVA面试问题总结 JAVA是一种广泛应用的编程语言,作为一名JAVA开发者,需要具备扎实的基础知识和实践经验。本文总结了常见的JAVA面试问题,涵盖了JAVA基础、JSP、Servlet、XML、J2EE、MVC、数据库等方面的知识点。...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
Java面试宝典是Java程序员求职面试的重要参考资料,它涵盖了Java编程语言的核心概念、高级特性、设计模式、并发处理、框架应用、数据库交互等多个方面。以下将详细解析这些关键知识点: 1. **Java基础**:面试中,...
常见Java面试问题,里面涵盖了基础的Java面试问题,有助于准备面试
《Java面试宝典2018版》是针对Java开发者准备面试的重要参考资料,它涵盖了Java编程语言、Java虚拟机(JVM)、并发编程、框架、设计模式等多个关键领域的重要知识点。这本书旨在帮助Java程序员深入理解技术原理,...
9. **头条java面试题**:这个可能是特定平台或公司对Java开发者的技术要求,可能包含更具体的热点问题和技术趋势。 10. **2024 Java offer 收割指南**:这份指南可能提供求职策略、面试技巧、简历优化建议,帮助...
在准备2022年的Java面试时,了解和掌握关键知识点是至关重要的。Java作为一款广泛应用的后端开发语言,其面试通常会涵盖基础语法、面向对象编程、集合框架、多线程、JVM内存管理、数据库交互以及开源框架等方面。...
本资源包"Java面试宝典和2018Bat公司面试题"包含了针对Java程序员精心整理的面试资料,旨在帮助求职者全面了解并掌握Java技术的核心知识点,以及在BAT(百度、阿里巴巴、腾讯)等知名互联网公司面试中可能遇到的问题...
总的来说,准备Java面试时,你需要深入理解这些技术的原理、应用场景和最佳实践,结合实际项目经验进行回答,才能在面试中展现出专业水平。通过这份1000+面试题的资源,你可以系统地复习并测试自己的知识深度,提升...
最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 35道 BTA 常问的 Java基础39道常见面试题及详细答案 Dubbo面试题 47道 ElasticSearch面试题 30道 Git常用命令面试题 60道 Java并发...
发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~博主已将这些面试题整理到一个网站上,每天更新 Java 面试题,目前有 1万多道 Java 高频面试题。...
从数据结构,到开发设计模式,再到java基础详细讲述java面试常见问题,让你面试轻松过关,并且懂得面试技巧,增加自身基础知识
Java面试宝典2017版是一份集大成的面试资源,专为准备Java相关...通过深入理解和熟练掌握上述知识点,你可以更好地应对Java面试,展现出扎实的技术功底和解决问题的能力。不断学习和实践,是成为优秀Java开发者的关键。
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
《JAVA面试宝典》是一本全面涵盖Java技术体系和求职面试知识的指南,旨在帮助Java开发者准备面试,提升技能。本书共分为十章,从基础知识到框架应用,再到项目实战和面试题解析,覆盖了Java开发者的必备技能。 第一...