java多线程试题_第1页
java多线程试题_第2页
java多线程试题_第3页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、狂翔 IT 工作室 多线程试程选择题1. 以下说法中,正确的一项为哪一项 AA. 单处理机的电脑上,2 个纯种一官半职直不能并发执行B. 单处理机的电脑上,2 个线程实际能够并发执行C. 一个线程可以包含多个线程D. 一个进程只能包含一个线程2. 以下说法中错误的一项为哪一项 AA. 线程就是程序B线程是一个程序的单个执行流B.3. 以下哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态D A. 等待阴塞状态下的线程被 notify() 唤B. 等待阻塞状态下的纯种被interrput() 中断C. 等待时间到D. 等待阻塞状态下的线程调用wait() 方法4. 以下哪个方法可以使线程从运行

2、状态进入其他阻塞状态 AA.5. 以下不是进程组成局部的一项为哪一项 DA. 代码B数据C.6. 以下哪一个不属于 java 线程模型的组成局部DA.7. 以下说法中错误的一项为哪一项 CA. Java 中的第一个线程都属于某个线程组B. 线程只能在其创立时设置所属的线程组C. 线程创立之后,可以从一个线程组转移到另一个线程组D. 新建的线程默认情况下属于其父线程所属的线程组8. 以下不属于线程组成局部的一项为哪一项CA.9. 以下关于 JAVA 线程模型的说法中,错误的一项为哪一项 AA.类中被定义10. 以下说法中错误的一项为哪一项 DA. 一个线程是一个 Thread 类的实例B. 线程

3、从传递给纯种的 Runnable 实例run() 方法开始执行C. 线程操作的数据来自 Runnable 实例D. 新建的线程调用start()方法就能立即进入运行状态11. 以下关于 Thread 类提供的线程控制方法的说法中,错误的一项为哪一项 DA. 在线程 A 中执行线程 B 的 join() 方法,那么线程 A 等待直到 B 执行完成B. 线程 A 通过调用 interrupt() 方法来中断其阻塞状态C. 假设线程A调用方法isAlive()返回值为true,那么说明A正在执行中D. curren tThread()方法返回当前线程的引用12. 以下说法中,错误的一项为哪一项A.

4、对象锁在synchronized()语句执行完之后由持有它的线程返还B. 对象锁在synchronized()语句中出现异常时由持有它的线程返还C. 当持有锁的线程调用了该对象的wait()方法时,线程将释放其持有的锁D. 当持有锁的线程调用了该对象的构造方法时,线程将释放其持有的锁13. 下面的哪一个关键字通宵用来对对象的加锁,从而使得对对象的访问是排他的AA. sirializeB tran sie ntC synchroni zedD static14. 以下关于线程的说法以中,正确的一项为哪一项 DA. 由同一类创立的多个线程都同时运行结束B. 创立线程只能通过继承类C. 调用susp

5、end方法暂停的一个线程将不会再被重新执行D. 程序的执行完毕与超级线程 (daemon threads)无关15. 以下说法中错误的一项为哪一项CA. 可串行化的类必须实现 Serializable接口B. 可串行化的类中的静态变量可以不被串行化C. private数据访问权限能够限制数据不被串行化D. 对象串行化使用java语言提供的默认机制16. 以下说法中错误的一项为哪一项CA. 可串行化的类必须实现 Serializable接口B. 可串行化的类中的静态变量可以不被串行化C. private数据访问权限能够限制数据不被串行化D. 对象串行化java语言提供的默认机制17. 以下说法中

6、正确的一项为哪一项 AA.18. 以下说法中错误的一项为哪一项CA. java的纯种体由Thread类的run()方法定义B. 线程创立时已经确定了提供线程体的对象C. 在程序中通过调用Thread类的run()方法创立线程对象D. java中每一个线程都有自己的名字19. 以下说法中错误的一项为哪一项Bsynchronized 力口锁synchronized 力口锁syschronized 标识20. 以下有关线程的表达中正确的一项为哪一项BA. 一旦一个线程被创立,它就立即开始运行 start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行B. 当一个线程因为抢占机制而停止运行

7、时,它被放在可运行队列的前面填空题1. 在操作系统中,被称做轻型的进程是线程2. 多线程程序设计的含义是可以将一个程序任务分成几个并行的任务3. 在Java程序中,run()方法的实现有两种方式: 实现 Runnable接口和_继承Thread类线程5多个线程并发执行时,各个线程中语句的执行顺序是确定 的,但是线程之间的相对执行顺序是不确定的排他 锁7程序中可能出现一种情况:多个纯种互相等待对方持有的锁,而在得到对方的锁 之前都不会释放自己的锁,这就是 死锁 8. notyfyAIIO方法将对象 wait pool中的所有纯种都移到 lock pool中。9在一个线程中,建议使用标志,而不使用

8、stop()方法终止另一个线程。线程组把一组线程看做一个对象进行统一处理。内核 级的实体,而线程是一个 用户 级的实体数据和 代码构成了线程体。13.线程的优先级是在 Thread类的常数MINPRIORITY 和 MAX PRIORITY之间的一个值14.Java的线程高度策略是基于优先级的抢占式调度。15.处于新建状态的线程可以使用的控制方法是start() 和 stop()。16. 一个讲程可以包含多个线程17.多任务操作系统运行多个进程来并发地执行多个任务18.线程是由表示程序运行状态的存放器组成的19.多线程允许单个程序创立多个并行执行的线程来完成多个子任务2O.Thread类中表示

9、最高优先级的常量是getPriority(),而表示最低优先级的常量是 setPriority(0 .三简答题1.简述 synchronized禾口 java.util.concurrent.locks.Lock的异同 ?答:主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock 一定要求程序员手工释放,并且必须在fin ally从句中释放。对象锁、sleep、wait、notify 、notifyAII对象锁:每个对象都有对象锁,当某个线程进入用sy n

10、chronized 定义方法时,就获得了当前类对象方法所属的类的对象的锁,其他线程就不能再获得该锁,直到线程释放该锁。一个类对象有一个对象锁,多个同步方法公用一个对象锁。sleep :是当前线程处于休眠状态,将对cpu的控制权交给其他线程,但不释放当前对象的锁,其他线程可以获得cpu,但不能进入当前线程控制的对象锁。wait :与sleep的区别是,它会释放对象锁,其他线程可以进入该同步块。notify :进入当前同步块的线程调用wait方法变成休眠状态的线程,notify将该线程变成等待状态。notifyAll :进入当前同步块的线程调用 wait 方法变成休眠状态, notifyAll 使

11、所有休 眠线程变成等待状态。一个类中有多个同步方法,进入任意一个同步块都将获得该对象锁,由于 wait 方法使 进入同步块的线程休眠, notify 只能唤醒所有被休眠线程中的一个, notifyAll 可以唤醒所 有休眠线程。通常线程的通信通过 wait , notifyAll 和 wait 条件来实现。3.java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend() 方 法为何不推荐使用?答:有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口用 synchronized 关键字修饰同步方法反 对使用 stop() ,是因为它不

12、平安。它会解除由线程获取的所有锁定,而且如果对象处 于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果 很难检查出真正 的问题所在。 suspend() 方法容易发生死锁。 调用 suspend() 的时候, 目标线程会停下来, 但却仍然持有在这之前获得的锁定。此 时,其他任何线程都不能访问锁定的资源,除非被 " 挂起 " 的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任 何一个锁定的资源, 就 会造成死锁。 所以不应该使用 suspend() ,而应在自己的 Thread 类中置入一个标志,指出线程应该活动还是挂起。假设标志指出线程应

13、该挂起,便用 wait() 命其进入等待状态。假设标志指出线程应当恢复,那么用一个 notify() 重新启动线 程。4. sleep() 和 wait() 有什么区别 ?答: sleep 是线程类 Thread 的方法,导致此线程暂停执行指定时间,给执 行时机给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释放对 象锁。 wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进入 等待此对象的等待锁定池,只有针对此对象发出 notify 方法或 notifyAll 后本线程 才进入对象锁定池准备获得对象锁进入运行状态。5. 同步和异

14、步有何异同,在什么情况下分别使用他们?举例说明。答: 如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正 在读的数据可能已经被另一个线程写过了, 那么这些数据就是共享数据, 必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法, 并且不希望让程序等待 方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。6. 启动一个线程是用 run() 还是 start()?答: 启动一个线程是调用 start() 方法, 使线程所代表的虚拟处理机处于可运行状态, 这 意味着它可以由 JVM 调度并执行。这并不意味着线程就会立即运行。run()

15、方法可以产生必须退出的标志来停止一个线程。7. 当一个线程进入一个对象的一个 synchronized 方法后, 其它线程是否可进入此对 象的其它方法 ?答: 不能,一个对象的一个 synchronized 方法只能由一个线程访问。8. 请说出你所知道的线程同步的方法。答: wait(): 使一个线程处于等待状态,并且释放所持有的对象的 lock 。sleep(): 使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException 异常。notify(): 唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的 唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。Allnotity(): 唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的 锁,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论