- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA多线程和并发基本面试问答
原文链接?? 译文连接?作者:Pankaj ?译者: 郑旭东??校对:方腾飞
多线程和并发问题是Java技术面试中面试官比较喜欢问问题之一。在这里,从面试角度列出了大某些重要问题,但是你依然应当牢固掌握Java多线程基本知识来相应日后遇到问题。(校对注:非常赞同这个观点)
Java多线程面试问题
1. 进程和线程之间有什么不同?
一种进程是一种独立(self contained)运营环境,它可以被看作一种程序或者一种应用。而线程是在进程中执行一种任务。Java运营环境是一种包括了不同类和程序单一进程。线程可以被称为轻量级进程。线程需要较少资源来创立和驻留在进程中,并且可以共享进程中资源。
2. 多线程编程好处是什么?
在多线程程序中,各种线程被并发执行以提高程序效率,CPU不会由于某个线程需要等待资源而进入空闲状态。各种线程共享堆内存(heap memory),因而创立各种线程去执行某些任务会比创立各种进程更好。举个例子,Servlets比CGI更好,是由于Servlets支持多线程而CGI不支持。
3. 顾客线程和守护线程有什么区别?
当咱们在Java程序中创立一种线程,它就被称为顾客线程。一种守护线程是在后台执行并且不会制止JVM终结线程。当没有顾客线程在运营时候,JVM关闭程序并且退出。一种守护线程创立子线程依然是守护线程。
4. 咱们如何创立一种线程?
有两种创立线程办法:一是实现Runnable接口,然后将它传递给Thread构造函数,创立一种Thread对象;二是直接继承Thread类。若想理解更多可以阅读这篇关于如何在 Java中创立线程文章。
5. 有哪些不同线程生命周期?
当咱们在Java程序中新建一种线程时,它状态是New。当咱们调用线程start()办法时,状态被变化为Runnable。线程调度器会为Runnable线程池中线程分派CPU时间并且讲它们状态变化为Running。其她线程状态尚有Waiting,Blocked?和Dead。读这篇文章可以理解更多关于 线程生命周期知识。
6. 可以直接调用Thread类run()办法么?
固然可以,但是如果咱们调用了Threadrun()办法,它行为就会和普通办法同样,为了在新线程中执行咱们代码,必要使用Thread.start()办法。
7. 如何让正在运营线程暂停一段时间?
咱们可以使用Thread类Sleep()办法让线程暂停一段时间。需要注意是,这并不会让线程终结,一旦从休眠中唤醒线程,线程状态将会被变化为Runnable,并且依照线程调度,它将得到执行。
8. 你对线程优先级理解是什么?
每一种线程都是有优先级,普通来说,高优先级线程在运营时会具备优先权,但这依赖于线程调度实现,这个实现是和操作系统有关(OS dependent)。咱们可以定义线程优先级,但是这并不能保证高优先级线程会在低优先级线程前执行。线程优先级是一种int变量(从1-10),1代表最低优先级,10代表最高优先级。
9. 什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?
线程调度器是一种操作系统服务,它负责为Runnable状态线程分派CPU时间。一旦咱们创立一种线程并启动它,它执行便依赖于线程调度器实现。时间分片是指将可用CPU时间分派给可用Runnable线程过程。分派CPU时间可以基于线程优先级或者线程等待时间。线程调度并不受到Java虚拟机控制,因此由应用程序来控制它是更好选取(也就是说不要让你程序依赖于线程优先级)。
10. 在多线程中,什么是上下文切换(context-switching)?
上下文切换是存储和恢复CPU状态过程,它使得线程执行可以从中断点恢复执行。上下文切换是多任务操作系统和多线程环境基本特性。
11. 你如何保证main()办法所在线程是Java程序最后结束线程?
咱们可以使用Thread类joint()办法来保证所有程序创立线程在main()办法退出前结束。这里有一篇文章关于 Thread类joint()办法。
12.线程之间是如何通信?
当线程间是可以共享资源时,线程间通信是协调它们重要手段。Object类中wait()\notify()\notifyAll()办法可以用于线程间通信关于资源锁状态。点击 这里有更多关于线程wait,notify和notifyAll.
13.为什么线程通信办法wait(),notify()和notifyAll()被定义在Object类里?
Java每个对象中均有一种锁(monitor,也可以成为监视器) 并且wait(),notify()等办法用于等待对象锁或者告知其她线程对象监视器可用。在Java线程中并没有可供
原创力文档


文档评论(0)