第13章 多线程
一、选择题
1.当线程调用wait()方法处于等待状态时,哪些方法可以让其恢复运行?( )多选
A.join()方法 B.run()方法 C.notify()方法 D.notifyAll()方法
2.对于如下代码,在A处使用哪个语句可以在新线程中输出Hello World?( )
public class Test implements Runnable {
public void run() {
System.out.println("Hello World");
}
public static void main(String[] args) {
Test test = new Test();
Thread thread = new Thread(test);
// A
}
}
A.test.run(); B.thread.run(); C.thread.start(); D.System.out.println(“Hello World”);
3.当编译和运行下列代码时会发生什么?( )
public class Test extends Thread {
public void start() {
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
}
}
public static void main(String[] args) {
Test test = new Test();
test.run();
}
}
A.编译错误,因为Test类中没有重写run()方法
B.运行错误,因为Test类中没有重写run()方法
C.正常运行,输出0 1 2 3 4 5 6 7 8 9
D.正常运行,输出为空
4.下列关于线程的哪些/个说法是正确的?( )
A.创建新线程只能通过继承Thread类
B.线程的名称可以用来区别线程
C.当仅有守护线程存在时,程序会退出执行
D.使用同步机制可以避免不同线程对同一数据修改时可能发生的数据损毁
5.如果下列代码能够正常运行,关于RunHandler类的哪些/个说法是正确的?( )
public class Test {
public static void main(String[] args) {
Thread thread = new Thread(new RunHandler());
}
}
A.RunHandler类必须实现Runnable接口
B.RunHandler类必须继承Thread类
C.RunHandler类必须编写访问权限修饰符为public、返回值为void、参数为空的run()方法
D.RunHandler类必须编写init()方法
6.下面说法错误的是( )。
A.线程就是程序 B.线程是一个程序的单个执行流
C.多线程是指一个程序的多个执行流 D.多线程用于实现并发
7.下面哪个方法可以使线程从运行状态进入其他阻塞状态( )。
A.wait B.start C.sleep D.yield
8.下列说法中错误的一项是( )。
A. 一个线程是一个Thread类的实例
B. 线程从传递给纯种的Runnable实例run()方法开始执行
C. 线程操作的数据来自Runnable实例
D. 新建的线程调用start()方法就能立即进入运行状态
9.下列哪一个操作不能使线程从等待阻塞状态进入对象阻塞状态( )。
A. 等待阻塞状态下的线程被notify()唤醒
B. 等待阻塞状态下的纯种被interrput()中断
C. 等待时间到
D. 等待阻塞状态下的线程调用wait()方法
10.下面说法正确的是( )。
A.java中的线程是非抢占式的 B.java中的线程不可以共享数据
C.每个java程序都至少有一个线程,即主线程 D.java中的线程不可以共享代码
一、选择题答案
1.C、D 2.C 3.D 4.C、D 5.A、C 6.A 7.C 8.D 9.D 10.C
二、填空题
1. 使用Thread类的 方法启动新线程。
2. 在Runnable接口中定义的方法是 。
3. 编写同步方法时需要使用 关键字。
4. 使用Thread类的 方法可以让线程进入休眠状态并在一定的时间后自动唤醒。
5.查看线程名称的方法 。
6.在操作系统中,被称做轻型的进程是 。
7.线程的声明周期包括_________、、、_________。
8.线程有执行的优先,优先级的范围是_________,默认值为_________,可以使用Thread类中_________方法来设定线程的优先级。
9.结束线程有两种情况,一种是_________,另一种是_________。
10、使用Thread类中的______________方法来设置一个线程为后台线程。
二、填空题答案
1、start()
2、run()
3、synchronized
4、sleep()
5、getName()
6、线程
7、创建、可执行、非可执行、消亡。
8、1~10、5、setPriority()
9、自然消亡、强制死亡
10、setDaemon()