第9章 Java多线程机制
一、选择题
1.下列说法中,正确的一项是( A )。
A.单处理机的计算机上,2个线程实际上不能并发执行 B.单处理机的计算机上,2个线程实际上能够并发执行 C.一个线程可以包含多个进程 D.一个进程只能包含一个线程 【解析】单处理机的计算机上通过一个极短的固定时间段或者在线程等待时,切换到另一个线程,这种调度过程时间极短,看上去像是并发执行。
2.下列说法中,错误的一项是( A )。 A.线程就是程序 B.线程是一个程序的单个执行流 C.多线程是指一个程序的多个执行流 D.多线程用于实现并发 【解析】线程是一个程序的单个执行流,而不是程序本身。而多线程作为实现并发的一个重要手段,是一个程序的多个执行流。 3.下列关于Thread类的线程控制方法的说法中错误的一项是( C )。
A.线程可以通过调用sleep()方法使比当前线程优先级低的线程运行
B.线程可以通过调用yield()方法使和当前线程优先级一样的线程运行
C.线程的sleep()方法调用结束后,该线程进入运行状态 D.若没有相同优先级的线程处于可运行状态,线程调用yield()方法时,当前线程将继续执行
【解析】线程的sleep()方法调用结束后,该线程进入就绪状态,而不是运行状态。
4.方法resume()负责恢复下列哪一个线程的执行( D )?
A.通过调用stop()方法而停止的线程 B.通过调用sleep()方法而停止的线程 C.通过调用wait()方法而停止的线程 D.通过调用suspend()方法而停止的线程
【解析】通过调用suspend()方法而停止的线程需要调用resume()恢复。
5.下面的哪一个关键字通常用来对对象加锁,从而使得对对象的访问是排他的( C )? A.serialize B.transient
C.synchronized D.static
【解析】synchronized用来对对象加锁,从而使得对对象的访问是排他的。
6.下列说法中,错误的一项是( A )。 A.线程一旦创建,则立即自动执行
B.线程创建后需要调用start()方法,将线程置于可运行状态
C.调用线程的start()方法后,线程也不一定立即执行 D.线程处于可运行状态,意味着它可以被调度
【解析】线程创建后需要调用start()方法,将线程置于可运行状态。
7.下列说法中,错误的一项是( A )。 A.Thread类中没有定义run()方法 B.可以通过继承Thread类来创建线程 C.Runnable接口中定义了run()方法 D.可以通过实现Runnable接口创建线程 【解析】Thread类和Runnable接口中都定义了run()方法,而start()方法只有Thread类中进行了定义,而Runnable接口中没有定义。
8.Thread类定义在下列哪个包中( B )? A.java.io B.java.lang C.java.util D.java.awt
【解析】Thread类定义在java.lang包中,因此使用时可以不用显式加载。
9.Thread类的常量NORM_PRIORITY代表的优先级是( C )。
A.最低优先级 B.最高优先级 C.普通优先级 D.不是优先级 【解析】NORM_PRIORITY代表的优先级是普通优先级。 10.下列关于线程优先级的说法中,错误的一项是( D )。
A.MIN_PRIORITY代表最低优先级 B.MAX_PRIORITY代表最高优先级
C.NORM_PRIORITY代表普通优先级 D.代表优先级的常数值越大优先级越低 【解析】代表优先级的常数值越大优先级越高
二、填空题
1.多线程是指程序中同时存在着 多 个执行体,它们按几条不同的执行路线共同工作,独立完成各自的功能而互不干扰。
2.每个Java程序都有一个缺省的主线程,对于Application类型的程序来说,主线程是方法 main() 执行的线程。 3.Java语言使用 Thread 类及其子类的对象来表示线程,新建的线程在它的一个完整的生命周期中通常要经历 新
16
生 、 就绪 、 运行 、 阻塞 和 死亡 等五种状态。 4.在Java中,创建线程的方法有两种:一种方法是通过创建 Thread 类的子类来实现,另一种方法是通过实现 Runnable 接口的类来实现。
5.用户可以通过调用Thread类的方法 setPriority() 来修改系统自动设定的线程优先级,使之符合程序的特定需要。 6. start() 方法将启动线程对象,使之从新建状态转入就绪状态并进入就绪队列排队。
7.Thread类和Runnable接口中共有的方法是 run() ,只有Thread类中有而Runnable接口中没有的方法是 start() ,因此通过实现Runnable接口创建的线程类要想启动线程,必须在程序中创建 Thread 类的对象。 8.在Java中,实现同步操作的方法是在共享内存变量的方法前加 synchronized 修饰符。
9.线程的优先级是一个在 1 到 10 之间的正整数,数值越大,优先级越 高 ,未设定优先级的线程其优先级取缺省值 5 。
10.Thread类中代表最高优先级的常量是 MAX_PRIORITY ,表示最低优先级的常量是 MIN_PRIORITY 。
三、判断题
1.一个Java多线程的程序不论在什么计算机上运行,其结果始终是一样的。( × )
2.Java线程有五种不同的状态,这五种状态中的任何两种状态之间都可以相互转换。( × ) 3.所谓线程同步就是若干个线程都需要使用同一个synchronized修饰的方法。( √ )
4.使用Thread子类创建线程的优点是可以在子类中增加新的成员变量,使线程具有某种属性,也可以在子类中新增加方法,使线程具有某种功能。但是,Java不支持多继承,Thread类的子类不能再扩展其他的类。( √ )
5.Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,分别用Thread类中的类常量表示。每个Java线程的优先级都在常数1和10之间,即Thread.MIN_PRIORITY和Thread.MAX_PRIORITY之间。如果没有明确地设置线程的优先级别,每个线程的优先级都为常数8。( × )
6.当线程类所定义的run( )方法执行完毕,线程的运行就会终止。( √ ) 7.线程的启动是通过引用其start()方法而实现的。( √ )
17
第10章 组件及事件处理
一、选择题
1.下列说法中错误的一项是( B )。
A.构件是一个可视化的能与用户在屏幕上交互的对象
B.构件能够独立显示出来
C.构件必须放在某个容器中才能正确显示 D.一个按钮可以是一个构件
【解析】构件不能独立显示,它必须放在某个容器中才能正确显示。
2.进行Java基本GUI设计需要用到的包是( C )。A.java.io B.java.sql C.java.awt D.java.rmi 【解析】进行Java基本GUI设计需要用到的包是java.awt和javax.swing
3.Container是下列哪一个类的子类( D )?
A.Graphics B.Window C.Applet D.Component 【解析】Container类是由Component类派生的。 4.java.awt.Frame的父类是( B )。 A.java.util.Window B.java.awt Window C.java.awt Panel D.java.awt.ScrollPane 【解析】java.awt.Frame的父类java.awt Window。 5.下列哪个方法可以将MenuBar加入Frame中( D )?
A.setMenu() B.addMenuBar() C.add() D.setMenuBar()
【解析】可以将MenuBar加入Frame中的方法是setMenuBar()。
6.下列叙述中,错误的一项是( D )。
A.采用GridLayout布局,容器中的每个构件平均分配容器空间
B.采用GridLayout布局,容器中的每个构件形成一个网络状的布局
C.采用GridLayout布局,容器中的构件按照从左到右、从上到下的顺序排列
D.采用GridLayout布局,容器大小改变时,每个构件不再平均分配容器空间
【解析】采用GridLayout布局,容器大小改变时,每个构件平均分配容器空间。
7.当单击鼠标或拖动鼠标时,触发的事件是( D )。
A.KeyEvent B.ActionEvent C.ItemEvent D.MouseEvent
【解析】对鼠标操作,触发的事件是MouseEvent事件。 8.下列哪一项不属于Swing的顶层组件( C )? A.JApplet B.JDialog C.JTree D.Jframe 【解析】JTree 只有在容器中才能显示,它不属于swing的顶层组件。
9.下列说法中错误的一项是( D )。
A.在实际编程中,一般使用的是Component类的子类 B.在实际编程中,一般使用的是Container类的子类 C.Container类是Component类的子类
D.容器中可以放置构件,但是不能够放置容器
【解析】容器中既可以放置构件,也可以放置容器。 10.下列哪一项不属于AWT布局管理器( D )?
A.GridLayout B.CardLayout C.BorderLayout D.BoxLayout 【解析】BoxLayout属于swing布局管理器,不属于AWT布局管理器。
11.下列说法中错误的一项是( A )。
A.MouseAdapter是鼠标运动适配器 B.WindowAdapter是窗口适配器
C.ContainerAdapter是容器适配器 D.KeyAdapter是键盘适配器
【解析】MouseAdapter是鼠标适配器,而MouseMotionAdapte才是鼠标运动适配器。
12.布局管理器可以管理构件的哪个属性( A )?
A.大小 B.颜色 C.名称 D.字体
【解析】布局管理器可以管理构件的位置和大小,而不能管理构件的其他属性。
13.编写AWT图形用户界面的时候,一定要import的语句是( B )。
A.import java.awt; B.import java.awt.*;
C.import javax.awt D.import javax.swing.*; 【解析】“import java.awt.*;”语句的含义是加载awt包中的所有类,而其他都不是。
14.在类中若要处理ActionEvent事件,则该类需要实现的接口是( B )。
A.Runnable B.ActionListener C.Serializable D.Event
【解析】处理ActionEvent事件的类需要实现的接口是ActionListener,它其中包含了actionPerformed()方法。 15.下列不属于java.awt包中的基本概念的一项是( C )。
A.容器 B.构件 C.线程 D.布局管理器
【解析】线程不属于java.awt包中的基本概念的一项,其他三个都是。
18
16.下列关于AWT构件的说法中错误的一项是( D )。 A.Frame是顶级窗口,它无法直接监听键盘输入事件 B.对话框需要依赖于其他窗口而存在 C.菜单只能被添加到菜单栏中
D.可以将菜单添加到任意容器的某处
【解析】菜单只能添加到Applet、Frame等容器中,不能添加到任意容器的某处。
17.JPanel的默认布局管理器是( C )。
A.BorderLayout B.GridLayout C.FlowLayout D.CardLayout
【解析】Panel、JPanel和Applet的默认布局管理器都是FlowLayout。
18.下列说法中错误的是( B )。
A.在Windows系统下,Frame窗口是有标题、边框的 B.Frame的对象实例化后,没有大小,但是可以看到 C.通过调用Frame的setSize()方法来设定窗口的大小
D.通过调用Frame的setVisible(true)方法来设置窗口为可见 【解析】Frame的对象实例化后,没有大小,也不能看到,只有通过调用Frame的setSize()和setVisible(true)方法才能设定窗口的大小和可见性。
19.下列说法中错误的是( D )。
A.同一个对象可以监听一个事件源上多个不同的事件
B.一个类可以实现多个监听器接口
C.一个类中可以同时出现事件源和事件处理者 D.一个类只能实现一个监听器接口
【解析】一个类可以实现多个监听器接口,从而实现对多个事件的监听。
20.下列选项中不属于容器的一项是( C )。 A.Window B.Panel C.FlowLayout D.ScrollPane
【解析】FlowLayout类属于布局管理器,而不属于容器。
二、填空题
1.Java编程语言是一种跨平台的编程语言,在编写图形用户界面方面,也要支持 跨平台 功能。
2.Java的图形用户界面技术经历了两个发展阶段,分别通过提供 awt 开发包和 swing 开发包来体现。
3.在进行界面设计的时候,只要掌握好AWT和Swing的三点思路,就能编写出较好的图形用户界面:首先是 界面中的构件如何放置 ,其次是 如何让构件响应用户的操作 ,第三是 掌握每种构件的显式效果和响应用户操作 。 4.java.awt包提供了基本的java程序的GUI设计工具,主要包括下述三个概念,它们分别是: 构件 、 容器 和 布局管理器 。
5.构件不能独立地显示出来,必须将构件放在一定的 容器 中才可以显示出来。
6.容器本身也是一个 构件 ,具有构件的所有性质,另外还具有放置其他 构件 和 容器 的功能。 7.容器中的布局管理器负责各个构件的 位置 和 大小 ,因此用户无法在这种情况下设置构件的这些属性。 8.如果用户确实需要亲自设置构件大小或位置,则应取消该容器的布局管理器,方法为 setLayout(null) 。 9.所有的构件都可以通过 add() 方法向容器中添加构件。 10.有3种类型的容器: Window 、 Panel 、 ScrollPane 。
11.FlowLayout类是 java.lang.Object 直接子类。其布局策略是:将容器中的构件按照加入的先后顺序从 左 向 右 排列,当一行排满之后就转到下一行继续从 左 向 右 排列,每一行中的构件都 居中 排列。它是 Panel 和 Applet 缺省使用的布局编辑策略。 12.对于一个原本不使用FlowLayout布局编辑器的容器,若需要将其布局策略改为FlowLayout,可以使用 setLayout(new FlowLayout()) 方法。
13.BorderLayout类的布局策略是:把容器内的空间划分为 东 、 西 、 南 、 北 、 中
五个区域,它们分别用字符串常量 East 、 West 、 South 、 North 、 Center 表示。 14.BorderLayout是 Window 、 Frame 、 Dialog 和 JApplet 的缺省布局策略。 15.在事件处理的过程中,主要涉及3类对象: 事件 、 事件源 和 事件处理者 。 16.事件类主要有两个: java.util.EventObject 类以及 java.awt.AWTEvent 类。
17.根据监听器器和注册监听器所在的类之间的关系,我们可以把事件处理分为以下几种情况:利用 外部类 对象、
本类 对象、 内部类 对象和 匿名内部类 对象处理事件。
18.标准构件是由 容器 和 基本构件 构成,容器是能够容纳其他构件的对象,而基本构件是放置在容器中而不能在其内部存放其他构件的对象。 19.按钮可以引发 ActionEvent 事件,TextField可产生 TextEvent 和 ActionEvent 事件,下拉列表可产生 ItemEvent 项目事件。当用户单击复选框使其选中状态发生变化时就会引发 ItemEvent 类代表的选择事件。滚动条可以引发 AjustmentEvent 类代表的调整事件。
19
20.ActionEvent事件类包含 ACTION_PERFOMED 事件,该事件通过 ActionListener 接口进行监听,通过调用
addActionListener() 方法将事件源注册到监听器,通过调用 actionPerformed(ActionEvent e) 方法实现监听后的动作,通过调用 getSource()方法 可以获得发生事件的事件源对象,调用 getActionCommand() 方法可以获取引发事件动作的命令名。 21.通常在itemStateChanged(ItemEvent e)方法里,会调用 e.getItemSelectable() 方法获得产生这个选择事件的列表(List)
对象的引用,再利用列表对象的方法 getSelectedIndex() 或 getSelectedItem() 就可以方便地得知用户选择了列表的哪个选项。
22.列表的双击事件 不能 (能/不能)覆盖单击事件。当用户双击一个列表选项时,首先产生一个 ItemEvent 事件,然后再产生一个 ActionEvent 事件。
22.调整事件(AdjustmentEvent)类只包含一个事件—— AJUSTMENT_VALUE_CHANGED事件,
AjustmentEvent.TRACK 代表鼠标拖动滚动条滑块的动作。
23.调用MouseEvent对象的 getID() 方法就可以知道用户引发的是哪个具体的鼠标事件。 24.在菜单项之间增加一条横向分隔线的方法是 addSeparator() 。
25.将菜单项添加到菜单中以及将菜单添加的菜单栏中所用的方法都是 add() ,将菜单栏添加到窗口中的方法是
setMenuBar() 。
26.对话框构件一般可以接受 ComponentEvent 事件和 FocusEvent 事件。
27.创建字体后,可以用 Graphics 类的成员方法 setFont() 来设置自己希望使用的字体。 28.Java中可以利用Graphics2D类的 drawImage() 方法显示图像。
29.在Swing中完全可以使用 java.awt.event 包中的各种类进行事件处理,同时它也可以使用 javax.swing.event 包中的类处理事件,而AWT则只能使用 java.awt.event 包中的各种类进行事件处理。
30.可将JOptionPane类的对话框分为4种类型,分别是只给出提示信息的 Message Dialog 、要求用户进行确认的
Confirm Dialog 、可输入数据的 Input Dialog 和由用户自己定义类型的 Option Dialog 。
三、判断题
1.容器是用来组织其他界面成分和元素的单元,它不能嵌套其他容器。( × ) 2.一个容器中可以混合使用多种布局策略。( × )
3.在Swing用户界面的程序设计中,容器可以被添加到其他容器中去。( √ )
4.使用BorderLayout布局管理器时,GUI组件可以按任何顺序添加到面板上。( √ ) 5.在使用BorderLayout时,最多可以放入五个组件。( √ )
6.每个事件类对应一个事件监听器接口,每一个监听器接口都有相对应的适配器。( × ) 7.Java中,并非每个事件类都只对应一个事件。( √ )
20