目录
一、选择题(每题3分)共 60分
1.Java语言中负责并发管理机制是(单选题)
2. 下列关于线程的说法,正确的是()单选题
3. 当线程调用start( )后,其所处状态为( )。(选择一项)
4.下列关于线程的优先级说法中,正确的是( BD )。(选择两项)
5. 以下选项中关于Java中线程控制方法的说法正确的是( AD )。(选择二项)
6. 关于sleep()和wait(),以下描述错误的一项是()单选题
7. 以下锁机机制中,不能保证线程安全的是()单选题
8. 下面关于线程池好处说法不正确的是(单选题)
9、单选题 以下说法错误的是? [单选题] *
10、下列对关键字synchronized说法错误的是()[单选题] *
11、以下说法错误的是?(选择一项) [单选题] *
12 . 如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
13. 单选题 已知ArrayList的对象是list,以下哪个方法是判断ArrayList中是否包含”Hello”?[单选题] *
14. 单选题 下列哪个方法可以获取列表指定位置处的元素(选择一项)
15. 多选题 下列有关HashSet的描述正确的是()(选择两项)
16. 单选题 以下关于Set对象的创建错误的是?(选择一项) *
17.以下关于Set和List的说法,正确的是?(选择一项)
18. 下面哪个Set是排序的?单选题
19. 下列关于泛型的说法,错误的是()单选题
20.关于枚举说法不正确的是;单选题
二、简答题:每题5分 共20分
1. ArrayList和LinkedList的区别
2.List和Set的区别
3.Set集合如何确保数据的不重复?
4.run()和start()的区别
三、上机题
第一题:把成绩低于80的成绩从集合中删除:
第二题:写两个线程,一个线程打印 1-52,另一个线程打印A-Z,打印顺序是12A34B…5152Z
总结
《Java训练营》 第四周考试题
| 1.D | 2.B | 3.C | 4.BD | 5.AD | 6.D | 7.C | 8.D | 9.D | 10.C |
| 11.D | 12.B | 13.A | 14.D | 15.AC | 16.A | 17.C | 18.C | 19.C | 20.D |
一、选择题(每题3分)共 60分
1.Java语言中负责并发管理机制是(单选题)
A。垃圾回收
B。虚拟机
C。代码安全
D。多线程
答案是 D
2. 下列关于线程的说法,正确的是()单选题
A.两个线程可以共享各类资源
B.一个进程可以包含多个线程
C.一个线程可以包含多个进程
D.单个CPU的计算机上,2个线程实际上不能并发执行
【但无论如何,都是通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent)。】
【在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel)。】
并发和并行是即相似又有区别(微观概念):
并行:指两个或多个事件在同一时刻点发生;
并发:指两个或多个事件在同一时间段内发生。
答案是B
3. 当线程调用start( )后,其所处状态为( )。(选择一项)
A.阻塞状态
B. 运行状态
C. 就绪状态
D. 新建状态
解析:线程的五个状态也就是它的生命周期:
新建状态----通过new关键字来创建线程对象
就绪状态----调用start()方法
运行状态----调用run()方法
阻塞状态----调用sleep()、wait()、join() 、yield()、interrupt ()等方法
消亡状态----调用stop()方法,但是此方法已经过时
答案是:C
4.下列关于线程的优先级说法中,正确的是( BD )。(选择两项)
A。线程的优先级是不能改变的
B.线程的优先级是在创建线程时设置的
C.在创建线程后的任何时候都可以重新设置
D.线程的优先级的范围在1-10之间
| 解析:线程的优先级可以通过setPriority(int newPriority)的方法进行设置 线程一共有三个优先级,分别是:最低优先级(1) 中等优先级(5) 最高优先级(10),咱们经常写的main方法就是中等优先级线程。 A:线程的优先级是可以更改也可以获取,但是有一点,即使设置为最高 优先级也不一定先执行,只是它优先执行的几率比较高。 B:线程的优先级是在创建时进行设置,通过setPriority()方法设置 C:正在执行的线程是不允许重新设置线程优先级的。 |
5. 以下选项中关于Java中线程控制方法的说法正确的是( AD )。(选择二项)
A.join ( ) 的作用是阻塞指定线程等到另一个线程完成以后再继续执行
B.sleep ( ) 的作用是让当前正在执行线程暂停,线程将转入就绪状态
C.yield ( ) 的作用是使线程停止运行一段时间,将处于就绪状态
D.setDaemon( )的作用是将指定的线程设置成守护线程
| A:join()方法—线程的强制加入,加入的线程执行完毕之后再执行其他线程 B:sleep()方法—线程休眠,等时间过时,线程处于运行状态 C:yield()方法—线程礼让,让出CUP资源,其他线程先执行,有些与join()。 D:setDaemon()方法--将指定的线程设置成后台线程 |
6. 关于sleep()和wait(),以下描述错误的一项是()单选题
A. sleep是线程类(Thread)的方法,wait是Object类的方法
B. sleep不释放对象锁,wait放弃对象锁
C. sleep暂停线程、但监控状态任然保持,结束后会自动恢复
D. wait后进入等待锁定池,只针对此对象发出notify方法后获取对象锁进入运行状态。
答案:D
| 分析:针对此对象的notify方法后获取对象锁并进入就绪状态,而不是运行状态。另外针对此对象的notifyAll方法后也可能获取对象锁并进入就绪状态,而不是运行状态 |
7. 以下锁机机制中,不能保证线程安全的是()单选题
A. Lock
B. Synchronized
C. Volatile
答案:C
(
8. 下面关于线程池好处说法不正确的是(单选题)
A。 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
B。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
C。提高线程的可管理性。
D。建立线程池会额外增加系统开销
答案 D
9、单选题 以下说法错误的是? [单选题] *
A sleep方法的参数是以毫秒为单位的
B 使用实现Runnable接口的方式创建线程,一定要重写run方法
C 当创建线程对象,线程即进入新建状态
D 调用sleep方法时,不需要处理异常(正确答案)
10、下列对关键字synchronized说法错误的是()[单选题] *
A synchronized(同步),即协调不同线程之间的工作
B synchronized关键字可以用在成员方法中
C 保证多个线程可以同时执行和结束
D 保证共享对象在同一时刻只能被一个线程访问
答案是 C
11、以下说法错误的是?(选择一项) [单选题] *
A wait()方法用于使线程等待
B notify()方法用于唤醒一个线程
C notifyAll()方法用于唤醒多个线程
D 使用wait()方法阻塞的线程,可以不用唤醒
答案是 D
12 . 如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);
A。[5, 3, 1, 6]
B。[4, 3, 1, 6]
C。[4, 3, 6]
D。[5, 3, 6]
答案是:B
13. 单选题 已知ArrayList的对象是list,以下哪个方法是判断ArrayList中是否包含”Hello”?[单选题] *
A list.contains("hello");
B list.add("hello");
C list.remove("hello");
D list.get("hello");
答案是 A
14. 单选题 下列哪个方法可以获取列表指定位置处的元素(选择一项)
A add(E e)
B remove()
C size()
D get(int index)
答案是 D
15. 多选题 下列有关HashSet的描述正确的是()(选择两项)
A HashSet是Set的一个重要实现类
B HashSet中的元素无序但可以重复
C HashSet中只允许一个null元素
D 不适用于存取和查找
答案是:AC
16. 单选题 以下关于Set对象的创建错误的是?(选择一项) *
A Set set=new Set();
B Set set=new HashSet();
C HashSet set=new HashSet();
D Set set=new HashSet(10);
答案是 A
17.以下关于Set和List的说法,正确的是?(选择一项)
A Set中的元素是可以重复的
B List中的元素是无序的
C HashSet中只允许有一个null元素
D List中的元素是不可以重复的
答案是 C
18. 下面哪个Set是排序的?单选题
A.LinkedHashSet
B.HashSet
C.TreeSet
D.AbstractSet
答案是 C
19. 下列关于泛型的说法,错误的是()单选题
A、泛型是一种参数化类型
B、增强了程序的灵活性和安全性
C、可以取代继承机制
D、泛型是JDK1.5出现的新特性
答案:C
泛型是Java SE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
T
20.关于枚举说法不正确的是;单选题
A。枚举是一组常量的集合
B。不需要提供Set方法,枚举对象值通常为只读。
C。对枚举对象/属性使用final和static关键字修饰,实现底层优化
D。枚举对象名通常使用全部小写,常量的命名规范
答案是 D
二、简答题:每题5分 共20分
1. ArrayList和LinkedList的区别
数据结构不同
1. 数组
2. 双向链表
数据结构不同
1. 数组
2. 双向链表
2.List和Set的区别
List:有序可重复
Set:无序不可重复
List:有序可重复
Set:无序不可重复
3.Set集合如何确保数据的不重复?
重写hashcoce()和equals()
重写hashcoce()和equals()
4.run()和start()的区别
start()启动线程,线程进入就绪状态
run() 执行线程任务,线程是running运行状态
start()启动线程,线程进入就绪状态
run() 执行线程任务,线程是running运行状态
三、上机题
第一题:把成绩低于80的成绩从集合中删除:
首先定义一个ArrayList集合,在生成随机数,把成绩随机生成出来存到集合中,
最后在遍历集合,把成绩小于80的从集合中删除,删除用到remove()方法
import java.util.ArrayList;
import java.util.Random;
//成绩低于80的从集合中删除
public class ArrayList01 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 20; i++) {
int i1 = r.nextInt(100);
list.add(i1);
}
for (int i = 0; i < list.size(); i++) {
int score = list.get(i);
if (score < 80){
list.remove(i);
i--;
}
}
System.out.println(list);
}
}
第二题:写两个线程,一个线程打印 1-52,另一个线程打印A-Z,打印顺序是12A34B…5152Z
class Print1{
private int flag=1;
private int count=1;
public synchronized void printNum(){
while (flag!=1){
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.print(2*count-1 );
System.out.print(2*count);
flag=2;
notify();
}
public synchronized void Zimu(){
while (flag!=2){
try{
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}
System.out.print((char)(count-1+'A'));
count++;
flag=1;
notify();
}
}
public class TestAA {
public static void main(String[] args) {
Print1 print=new Print1();
new Thread (()->{
for(int i=0;i<26;i++){
print.printNum();
}
}).start();
new Thread(()->{
for(int i=0;i<26;i++){
print.Zimu();
}
}).start();
}
}
总结
考的较差,但这是我的真实水平,我知道哪里是我的缺点,哪里有不足,哪里需要加强学习,线程、集合这块知识我自从锁之后就开始懵逼,对集合的掌握几乎于零,有时间我将会好好回头复习,把落下课程补回去,锁、List、Set、HashMap我来了!!



