Java 习题十
一、填空题
1.实现多线程有三种方式,一是通过继承_______类,二是通过实现________ 接口,三是通过实现_________接口。
2.在 Java语言中,同步方法需要用到关键字 ,对于同步方法而言无须指定 同步锁,它的同步锁是方法所在的对象,也就是__(关键字)。
3.线程的整个生命周期分为 6 个阶段,分别是 _、、 和 。
4. Thread 类中的 start()方法用于 _,当新线程启动后,系统会自动调用方法。
5.将某个线程设置为后台线程,需要调用线程的______方法,该方法必须在_
方法之前调用。
二、判断题
1.当我们创建一个线程对象时,该对象表示的线程就立即开始运行。( )
2.如果前台线程全部死亡,后台线程也会自动死亡。( )
3. 同步代码块中的锁对象可以是任意类型的对象。( )
4.静态方法不能使用 synchronized 关键字来修饰。( )
5.Java 提供的线程池来创建多线程,进一步优化线程管理。( ) 三、选择题
1.关于线程的创建过程,下面四种说法正确的有哪些?(多选)( )
A.定义 Thread 类的子类,重写 Thread 类的 run()方法,创建该子类的实例 对象,调用对象的 start()方法
B.定义 Thread 类的子类,重写 Thread 类的 run()方法,创建该子类的实例对
象,调用对象的 run()方法
C.定义一个实现 Runnable 接口的类并实现 run()方法,创建该类实例对象,
将其作为参数传递给 Thread 类的构造方法来创建 Thread 对象,调用 Thread 对 象的 start()方法
D.定义一个实现 Runnable 接口的类并实现 run()方法,创建该类对象,然后 调用 run()方法
2.对于线程的生命周期,下面四种说法正确的有哪些?(多选)( ) A.调用了线程的 start()方法,该线程就进入运行状态
B.线程的 run()方法运行结束或被未 catch 的 InterruptedException 等异常终
结,那么该线程进入死亡状态
C.线程进入死亡状态,但是该线程对象仍然是一个 Thread对象,在没有被 垃圾回收器回收之前仍可以像引用其他对象一样引用它
D.线程进入死亡状态后,调用它的 start()方法仍然可以重新启动 3.下面四个选项中,哪些是线程进入阻塞或者等待状态的原因?(多选)( ) A.线程试图获取某个对象的同步锁,而该锁被其他线程持有
B.线程调用了另一个线程的 join()方法
C.当线程调用了一个阻塞式的 IO 方法
D.线程调用了 setDaemon(boolean b)方法
4.在以下哪种情况下,线程进入就绪状态?( )
A.线程调用了 sleep(long millis)方法时 B.线程调用了 join()方法 C.线程调用了 yield()方法时 D.线程调用了 notify()方法 5.对于 wait()方法,下面说法正确的是?(多选)( )
A.wait()方法的调用者是同步锁对象
B.wait()方法使线程进入等待状态
C.调用同一锁对象的 notify()或 notifyAll()方法可以唤醒调用 wait()方法等待
的线程
D.调用 wait()方法的线程会释放同步锁对象
四、简答题
1.Java 中有几种方式可以实现多线程。
2.Java 中 sleep(long millis)方法和 wait()方法有什么区别。
3.简述为什么要使用多线程。
五、编程题
1.模拟传智播客的三个老师同时分发 80 份学习笔记,每个老师相当于一个 线程。
2.编写 10 个线程,第一个线程从 1 加到 10,第二个线程从 11 加到 20……第十 个线程
从 91 加到 100,最后再把十个线程结果相加。