1.如果线程死亡,它便不能运行。
(T)
2.在Java中,高优先级的可运行线程会抢占低优先级线程。
(T )
3.线程可以用yield方法使低优先级的线程运行。
(F)
4...程序开发者必须创建一个线程去管理内存的分配。
(F)
5.一个线程在调用它的start方法,之前,该线程将一直处于出生期。
(T)
6.当调用一个正在进行线程的stop( )方法时,该线程便会进入休眠状态。
(F)
7.一个线程可以调用yield方法使其他线程有机会运行。
(T)
二、选择题
1.Java语言中提供了一个▁D▁线程,自动回收动态分配的内存。
A.异步
B.消费者
C.守护
D.垃圾收集
2.Java语言避免了大多数的▁C▁错误。
A.数组下标越界
B.算术溢出
C.内存泄露
D.非法的方法参数
3.有三种原因可以导致线程不能运行,它们是▁ACD▁▁。
A.等待
B.阻塞
C.休眠
D.挂起及由于I/O操作而阻塞
4.当▁A方法终止时,能使线程进入死亡状态。
A.run
B.setPrority
C.yield
D.sleep
5.用▁B▁方法可以改变线程的优先级。
A.run
B.setPrority
C.yield
D.sleep
6.线程通过▁C▁方法可以使具有相同优先级线程获得处理器。
A.run
B.setPrority
C.yield
D.sleep
7.线程通过▁D▁方法可以休眠一段时间,然后恢复运行。
A.run
B.setPrority
C.yield
8.方法resume( )负责重新开始▁D▁线程的执行。
A.被stop( )方法停止
B.被sleep( )方法停止
C.被wait( )方法停止
D.被suspend( )方法停止
9.▁BCD▁方法可以用来暂时停止当前线程的运行。
A.stop( )
B.sleep( )
C.wait( )
D.suspend( )
三、简述题
1.简述程序、进程和线程之间的关系?什么是多线程程序?
答:程序是一段静态的代码,它是应用软件执行的蓝本。
进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程。
这个过程也是进程本身从产生、发展、到消亡的过程。
线程是比进程更小的单位。
一个进程在其执行过程中,可以产生多个线程,形成多个执行流。
每个执行流即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。
多线程程序是指一个程序中包含多个执行流。
2.线程有哪几个基本状态?它们之间如何转化?简述线程的生命周期。
答:新建状态,可运行状态,运行状态,阻碍状态,终止状态。
对线程调用各种控制方法,就使线程从一种状态转换到另一种状态。
线程的生命周期从新建开始,在可运行、运行和其他阻碍中循环,在可运行、运行、对象锁阻塞、等待阻塞中循环,最终在运行后run()方法结束后终止。
3.什么是线程调度?Java的线程调度采用什么策略?
答:在单个CPU上以某种顺序运行多个线程,称为线程的调度。
Java的线程调度策略是一种优先级的抢先式调度。
Java基于线程的优先级选择高优先级的线程进行运行。
该线程将持续运行,直到它终止运行,或其他高优先级线程称为可运行的。
4.如何在Java程序中实现多线程?
答:1:通过Thread类的构造方法
2:通过实现Runnable接口创建线程、
3:通过继承Thread类创建线程
5.试简述Thread类的子类或实现Runnable接口两种方法的异同?
答:采用继承Thread类方法使程序代码简单,并可以在run()方法中直接调用线程的其他方法。
而实现Runnable接口更符合面向对象设计的思想,因为从OO设计的角度,thread 类是虚拟CPU的封装,所以Thread的子类应该是关于CPU行为的类。
但在继承Thread类之类构造线程的方法中,Thread类的子类大都是与CPU不相关的类。
而实现Runnable接口的方法,将不影响Java类的体系,所以更加符合面向对象的设计思想。
同时,实现了Runnable 接口的类可以用extends继承其他的类。
四、程序设计题
1.编写一个类,在类中定义:
A:一个整型属性
B:一个方法,在这个方法中给变量加1,并打印出这个变量的值然后创建5个线程,分别调用类中定义的方法
(注意线程的同步)。