程序设计精典教程》 《Java 程序
设计精典教程》习题答案 编著:胡伏湘, 编著:胡伏湘,雷军环 清华大学出版社
第 10 章习题解答
一、 简答题
1.什么叫线程?什么叫多线程? .什么叫线程?什么叫多线程? 答: 线程是一个程序内部的一条执行线路, 一个比进程更小的能独立运行的基本单位。 多线程是指一个程序中同时存在着好几个执行体, 它们按几条不同的执行线路共同
工作, 独 立完成各自的功能而互不干扰 2.进程和线程的区别是什么? .进程和线程的区别是什么? 答:它们的区别在于: 进程是程序的一次动态执行过程,它对应了从代码加载,执行到执行完毕的 一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。线程是 比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形 成多条执行线路。每条线路,即每个线程也有它自身的产生、存在和消亡的 过程,也是一个动态的概念。 每个进程都有独立的代码和数据空间,进程间切换的开销大;而同一类线程 可以共享代码和数据空间,但每个线程有独立的运行栈和程序计数器,线程 切换的开销小。 3.简述线程的生命周期。 .简述线程的生命周期。 答:新建的线程在它完整的生命周期中,包括新建、就绪、运行、阻塞和死亡 5 种状 态。 (1)新建(new)状态,用 new 命令建立一个线程后,还没有启动其指定的指令序列, 这时的线程状态就是新建状态。 (2)就绪(Runnable)状态,也叫做可运行状态,处于新建状态的线程被启动后即 进入了本状态。 这时线程正在等待分配 CPU 资源, 一旦获得 CPU 资源即进入了自动运行状态。 (3)运行(running)状态,线程获得了 CPU 资源正在线程的指令,此时除非它自动 放弃 CPU 资源或者有更加高优先级的线程进入,否则线程将一直运行到结束。 (4)阻塞(blocked)状态,由于某种原因致使正在运行的线程让出 CPU 资源暂停自 己的执行, 即进入阻塞状态, 这时只有引起线程堵塞的原因被消除后才能使本线程回到就绪 状态。 (5)死亡(dead)状态,处于死亡状态的线程不具备继续运行的能力,死亡的原因 有两个:一个是正常的线程完成了它的全部任务后退出,另一种是线程被强制中止,如调用 stop( )或 destroy( )方法让线程消亡。此时线程不可能再进入就绪状态等待执行。 4.在 Java 语言中创建线程有几种方式?它们有何区别 . 语言中创建线程有几种方式?它们有何区别? 答:在 Java 语言中创建线程有两种方式:一种是创建 Thread 类的子类,另一种是实现 Runnable 接口,两种创建方式的区别在于: 直接继承 T
hread 类创建线程时,Thread 子类无法再从其他类继承。
1
使用 Runnable 接口创建线程时可以将代码和数据分开,形成清晰的模型。线 程体 run( )方法所在的类还可以从其他类继承一些有用的属性或方法,并有 利于保持程序风格的一致性。 5.
Java 线程的优先级设置遵循什么原则? . 线程的优先级设置遵循什么原则? 答:Java 线程的优先级设置遵从下述原则: (1) 线程创建时,子线程继承父线程的优先级 (2) 线程创建后,可在程序中通过调用 setPriority( )方法改变线程的优先级 (3) 线程的优先级是 1~10 之间的正整数,数字越大优先级越高,默认的优先级是居 中,即为 5。 6.举例说明什么叫线程的同步?Java 中如何实现线程的同步? .举例说明什么叫线程的同步? 中如何实现线程的同步 现线程的同步? 答: 当在一个程序中使用两个或多个线程时, 可能会发生多个线程同时要访问同一资源 的情况。例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件 中修改数据。在这种情况下,数据可能会变得不一致。我们需要做的是允许一个线程彻底完 成其任务后,再允许下一个线程执行。必须保证一个共