多线程小测验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单选题(每题3分,共计15分)

1、在以下哪种情况下,线程进入就绪状态?

A、线程调用了sleep()方法时

B、线程调用了join()方法

C、线程调用了yield()方法时

D、线程调用了notify()方法

2、如果线程正处于运行状态,则它可能到达的下一个状态是( )

A、只有终止状态

B、只有阻塞状态和终止状态

C、可运行状态,阻塞状态,终止状态

D、其他所有状态

3、以下哪种原因不会导致线程暂停运行。

A、等待

B、阻塞

C、休眠

D、挂起及由于I/O操作而阻塞

4、Thread类位于下列哪个包中?

A、java.io

B、ng

C、java.util

D、java.awt

5、线程调用sleep()方法后,该线程将进入以下哪种状态?

A、就绪状态

B、运行状态

C、阻塞状态

D、死亡状态

二多选题(每题5分,共计25分)

1、对于通过实现Runnable接口创建线程,下面说法正确的有哪些?

A、适合多个相同程序代码的线程去处理同一个资源的情况

B、把线程同程序代码、数据有效的分离,很好的体现了面向对象的设计思想

C、可以避免由于Java的单继承带来的局限性

D、编写简单,可以不通过Thread类直接创建线程

2、下面四个选项中,哪些是线程进入阻塞状态的原因?

A、线程试图获取某个对象的同步锁,而该锁被其它线程持有

B、线程调用了另一个线程的join()方法

C、当线程调用了一个阻塞式的IO方法

D、线程调用了setDaemon(boolean b)方法

3、对于wait()方法,下面说法正确的是?

A、wait()方法的调用者是同步锁对象

B、wait()方法使线程进入等待状态

C、调用同一锁对象的notify()或notifyAll()方法可以唤醒调用wait()方法等待的线程

D、调用wait()方法的线程会释放同步锁对象

4、对于死锁的描述,下面四种说法正确有哪些?

A、当两个线程互相等待对方释放同步锁时会发生死锁

B、Java虚拟机没有检测和处理死锁的措施

C、一旦出现死锁,程序会发生异常

D、处于死锁状态的线程处于阻塞状态,无法继续运行

5、关于线程的创建过程,下面四种说法正确的有哪些?

A、定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的start()方法

B、定义Thread类的子类,重写Thread类的run()方法,创建该子类的实例对象,调用对象的run()方法

C、定义一个实现Runnable 接口的类并实现run()方法,创建该类实例对象,将其作为参数传递给Thread 类的构造方法来创建Thread对象,调用Thread对象的start()方法

D、定义一个实现Runnable 接口的类并实现run()方法,创建该类对象,然后调用run()方法

三、判断题(对的打“√”,错的打“×”;每题2分,共10分)

1、当调用一个正在运行线程的stop()方法时,该线程便会进入休眠状态。(F)

2、一个线程可以调用yield方法使其他线程有机会运行。(T)

3、线程结束等待或者阻塞状态后,会进入运行状态。(T)

4、静态方法不能使用synchronized关键字来修饰。(F)

5、如果前台线程全部死亡,后台线程也会自动死亡。(T)

四、填空题(每题4分,共计20分)

1、线程的优先级用1~10之间的整数来表示,其中___10_____代表优先级最高,___1_____代表优先级最低。

2、要将某个线程设置为后台线程,需要调用该线程的___setDameon_____方法,该方法必须在__start()______方法之前调用。

3、在Java语言中,同步方法需要用到关键字__synchronized______,对于同步方法而言无需指定同步锁,它的同步锁是方法所在的__对象______,也就是__this______(关键字)

4、一个应用程序中有多条并发执行的线索,每条线索都被称作一个__线程______,它们会交替执行,彼此间可以进行通信。

5、线程的整个生命周期分为五个阶段,分别是__新建状态(new)______、___就绪状态(Runnable)_____、__运行状态(Running)______、___阻塞状态(Blocked)_____和__死亡状态(Terminated)______。

五多选题(每题10分,共计30分)

1、请按照题目的要求编写程序并给出运行结果。模拟传智播客的三个老师同时分发80份学习笔记,每个老师相当于一个线程。

public class Test01 { public static void main(String[] args) { Teacher t = new Teacher(); new Thread(t, "陈老师").start(); new Thread(t, "高老师").start(); new Thread(t, "李老师").start(); }}class Teacher implements Runnable { private int notes = 80; public void run() { while (true) { dispatchNotes(); // 调用售票方法if (notes <= 0) { break; } } } priva te synchronized void dispatchNotes() { if (notes > 0) { try { Thread.sleep(10); // 经过的线程休眠10毫秒} catch (InterruptedException e)

{ e.printStackTrace(); } System.out.pri ntln(Thread.currentThread().getName() + "---发出的笔记" + notes--); } }}

2、请按照题目的要求编写程序并给出运行结果。通过继承Thread类的方式创建两个线程,在Thread构造方法中指定线程的名字,并将这两个线程的名字打印出来。

public class MyThread extends Thread{ public MyThread(String name)

{ super(name); } public void run()

{ System.out.println(this.getName()); } public static void

main(String[] args) { new MyThread("Thread1").start(); new MyThread("Thread2").start(); }}

3、请简述什么是线程。

线程是一个程序的执行流,执行调度的单位,依托于进程存在。线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。

相关文档
最新文档