1、当我们创建一个线程对象时,该对象表示的线程就立即开始运行。错 2、如果前台线程全部死亡,后台线程也会自动死亡。对 3、同步代码块中的锁对象可以是任意类型的对象。对 4、静态方法不能使用synchronized关键字来修饰。错 5、线程结束等待或者阻塞状态后,会进入运行状态。错 三、选择题
1、Thread类位于下列哪个包中?B
A、java.io B、java.lang C、java.util D、java.awt 2、关于线程的创建过程,下面四种说法正确的有哪些?(多选)AC
A、定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的start()方法
B、定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的run()方法
C、定义一个实现Runnable 接口的类并实现run()方法,创建该类实例对象,将其作为参数传递给Thread类的构造方法来创建Thread对象,调用Thread对象的start()方法 D、定义一个实现Runnable 接口的类并实现run()方法,创建该类对象,然后调用run()方法 3、对于通过实现Runnable接口创建线程,下面说法正确的有哪些?(多选)ABC A、适合多个相同程序代码的线程去处理同一个资源的情况
B、把线程同程序代码、数据有效的分离,很好的体现了面向对象的设计思想 C、可以避免由于Java的单继承带来的局限性 D、编写简单,可以不通过Thread类直接创建线程
4、对于线程的生命周期,下面四种说法正确的有哪些?(多选) ABC(BC)
A、调用了线程的start()方法,该线程就进入运行状态 (就绪,还要获得CPU使用权)
B、线程的run()方法运行结束或被未catch的InterruptedException等异常终结,那么该线程进入死亡状态
C、线程进入死亡状态,但是该线程对象仍然是一个Thread对象,在没有被垃圾回收器回收之前仍可以像引用其它对象一样引用它
D、线程进入死亡状态后,调用它的start()方法仍然可以重新启动 5、对于死锁的描述,下面四种说法正确有哪些?(多选)AB(ABD) A、当两个线程互相等待对方释放同步锁时会发生死锁 B、Java虚拟机没有检测和处理死锁的措施 C、一旦出现死锁,程序会发生异常
D、处于死锁状态的线程处于阻塞状态,无法继续运行 6、下面四个选项中,哪些是线程进入阻塞状态的原因?(多选)ABC A、线程试图获取某个对象的同步锁,而该锁被其它线程持有 B、线程调用了另一个线程的join()方法 C、当线程调用了一个阻塞式的IO方法 D、线程调用了setDaemon(boolean b)方法
7、线程调用sleep()方法后,该线程将进入以下哪种状态?C A、就绪状态 B、运行状态 C、阻塞状态
D、死亡状态
8、在以下哪种情况下,线程进入就绪状态?D A、线程调用了sleep()方法时
B、线程调用了join()方法(终止)
C、线程调用了yield()方法时 D、线程调用了notify()方法??
9、下面四个选项中,对线程同步的目的描述正确的有哪些?(多选)AD(AB)
A、锁定资源,使同一时刻只有一个线程去访问它,防止多个线程操作同一个资源引发错误 B、提高线程的执行效率 C、让线程独占一个资源
D、让多个线程同时使用一个资源
10、对于wait()方法,下面说法正确的是?(多选)ABCD A、wait()方法的调用者是同步锁对象 B、wait()方法使线程进入等待状态
C、调用同一锁对象的notify()或notifyAll()方法可以唤醒调用wait()方法等待的线程 D、调用wait()方法的线程会释放同步锁对象
四、程序分析题
阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。
1.代码一:不能,RunHandler没有继承Thread,不能用Thread创建对象(程序不能编译通过,因为RunHandler类没有实现Runnable接口,因此RunHandler的实例对象不能作为参数传递给Thread的构造方法。)
class RunHandler {
public void run(){
System.out.println(\} }
public class Test {
public static void main(String [] args) {
Thread t = new Thread(new RunHandler()); t.start(); }
}
2.代码二:this is run(程序不能编译通过,因为Thread的子类A重写的run()方法的访问级别不能低于父类run()方法的。访问级别)
public class A extends Thread{
protected void run() {
System.out.println(\ }
public static void main(String[] args) { }
}
A a = new A(); a.start();
3.代码三:Exception(程序不能编译通过,因为同步方法中调用wait()方法的对象必须为同步锁对象)
public class Test{ }
private Object obj=new Object(); public synchronized void a(){ }
public static void main(String[] args) { }
new Test().a(); try { }
obj.wait();改this.wait() System.out.println(\System.out.println(\
} catch (InterruptedException e) {
4.为了使下面的程序能够输出“Thread is running”,请在在空格处填上相应的代码。
public class B implements Runnable {
public static void main(String[] args) { }
public void run() { }
public void go() { }
start(1);
System.out.println(\Thread t = new Thread(new B());
__t.start()_____________________ //此处填空