- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
多线程与并发面试題
————————————————————————————————作者:
————————————————————————————————曰期:
?
JAVA多线程和并发基础面试問答
HYPERLINK\t_blank原文链接??HYPERLINK"\t_blank译文连接?作者:Pankaj?译者:HYPERLINK\t"_blank郑旭東??校對:方腾飞
多线程和并发問題是Java技术面试中面试官比较喜欢問的問題之一。在這裏,從面试的角度列出了大部分重要的問題,不過你仍然应當牢固的掌握Java多线程基础知识来對应後来碰到的問題。(校對注:非常赞同這個观點)
Java多线程面试問題
1.進程和线程之间有什么不一样?
一种進程是一种独立(selfcontained)的运行环境,它可以被看作一种程序或者一种应用。而线程是在進程中执行的一种任务。Java运行环境是一种包括了不一样的类和程序的單一進程。线程可以被称為轻量级進程。线程需要较少的资源来创立和驻留在進程中,并且可以共享進程中的资源。
2.多线程编程的好处是什么?
在多线程程序中,多种线程被并发的执行以提高程序的效率,CPU不會由于某個线程需要等待资源而進入空闲状态。多种线程共享堆内存(heapmemory),因此创立多种线程去执行某些任务會比创立多种進程更好。举個例子,Servlets比CGI更好,是由于Servlets支持多线程而CGI不支持。
3.顾客线程和守护线程有什么区别?
當我們在Java程序中创立一种线程,它就被称為顾客线程。一种守护线程是在後台执行并且不會制止JVM终止的线程。當没有顾客线程在运行的時候,JVM关闭程序并且退出。一种守护线程创立的子线程仍然是守护线程。
4.我們怎样创立一种线程?
有两种创立线程的措施:一是实現Runnable接口,然後将它传递給Thread的构造函数,创立一种Thread對象;二是直接继承Thread类。若想理解更多可以阅讀這篇有关怎样在HYPERLINKJava中创立线程的文章。
5.有哪些不一样的线程生命周期?
當我們在Java程序中新建一种线程時,它的状态是New。當我們调用线程的start()措施時,状态被变化為Runnable。线程调度器會為Runnable线程池中的线程分派CPU時间并且讲它們的状态变化為Running。其他的线程状态尚有Waiting,Blocked?和Dead。讀這篇文章可以理解更多有关HYPERLINK线程生命周期的知识。
6.可以直接调用Thread类的run()措施么?
當然可以,不過假如我們调用了Thread的run()措施,它的行為就會和一般的措施同样,為了在新的线程中执行我們的代码,必须使用Thread.start()措施。
7.怎样让正在运行的线程暂停一段時间?
我們可以使用Thread类的Sleep()措施让线程暂停一段時间。需要注意的是,這并不會让线程终止,一旦從休眠中唤醒线程,线程的状态将會被变化為Runnable,并且根据线程调度,它将得到执行。
8.你對线程优先级的理解是什么?
每一种线程都是有优先级的,一般来說,高优先级的线程在运行時會具有优先权,但這依赖于线程调度的实現,這個实現是和操作系统有关的(OSdependent)。我們可以定义线程的优先级,不過這并不能保证高优先级的线程會在低优先级的线程前执行。线程优先级是一种int变量(從1-10),1代表最低优先级,10代表最高优先级。
9.什么是线程调度器(ThreadScheduler)和時间分片(TimeSlicing)?
线程调度器是一种操作系统服务,它负责為Runnable状态的线程分派CPU時间。一旦我們创立一种线程并启動它,它的执行便依赖于线程调度器的实現。時间分片是指将可用的CPU時间分派給可用的Runnable线程的過程。分派CPU時间可以基于线程优先级或者线程等待的時间。线程调度并不受到Java虚拟机控制,因此由应用程序来控制它是更好的选择(也就是說不要让你的程序依赖于线程的优先级)。
10.在多线程中,什么是上下文切换(context-switching)?
上下文切换是存储和恢复CPU状态的過程,它使得线程执行可以從中断點恢复执行。上下文切换是多任务操作系统和多线程环境的基本特性。
11.你怎样保证main()措施所在的线程是Java程序最终結束的线程?
我們可以使用Thread类的joint()措施来保证所有程序创立的线程在main()措施退出前結束。這裏有一篇文章有关HYPERLINK"Thread类的joint()措施。
12.线程之间是怎样通信的?
當线程间是可以共享资源時,线程间通信
文档评论(0)