Java面试题(5)

本文介绍了Java中的Iterator使用及其特点,对比了Iterator与ListIterator的差异,讨论了并行和并发的概念,以及线程与进程的区别。此外,还详细讲解了线程的状态、start()和run()方法的区别,以及sleep、wait和notify的用法。
摘要由CSDN通过智能技术生成

22.Iterator如何使用,有什么特点

java中的Iterator功能比较见到你,并且只能单向移动

1. iterator():要求容器返回一个Iterator

2. next():用于获取序列的下一个元素(第一次调用获取第一个元素)

3. hasNext():检查序列中是否还有元素

4. remove():将迭代器新返回的元素删除

(1)Iterator与ListIterator的区别 java为List设计了ListIterator,它具有更多的动能,可以从两个方向遍历List,也可以从List中插入和删 除元素。

1. Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List

2. Iterator对集合只能是前序遍历,ListIterator既可以前序遍历也可以后序遍历。

3. ListIterator实现Iterator接口,并包含其他的功能,比如:增加元素、替换元素、获取前一个和后 一个元素的索引等。 

23.并行和并发有什么区别

1. 并行是指两个或多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。 2. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。

3. 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。 所以并发编程的目标是充分利用处理器的每一个核,以达到最高的处理性能 

24.线程和进程的区别

线程是操作系统调度的最小单元,它可以让一个进程并发地处理多个任务,也叫轻量级进程。 总的来说,操作系统可以同时执行多个任务,每个任务就是一个进程。

1. 进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。 2. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更 高。

3. 线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。

4. 多线程的优点:减少程序响应时间;提高CPU利用率;创建和切换开销小;数据共享效率高;简化 程序结构

5. 同一进程中的多个线程可以并发执行。

(1)什么是守护线程 守护线程是个服务线程,准确来说就是服务其他的线程。

(2)创建线程有哪几种方式

1.继承Thread类创建线程类

1. 定义Thread类的子类,并重写run方法,该run方法的方法体就代表了线程要完成的任务。因此把 run()方法称为执行体。

2. 创建Thread子类的实例,即创建了线程对象。

3. 调用start()方法启动线程。

2.通过Runnable接口创建线程类

1. 定义runnable接口的实现类,并重写该接口的run方法,该run方法的方法体同样是该线程的线程 执行体。

2. 创建runnable实现类的实例,并以此实例作为Thread对象的的target参数来创建Thread对象,该 Thread对象才是真正的线程对象。

3. 调用start()方法启动线程。

3.通过Callable和Future创建线程

1. 创建 Callable 接口的实现类,并实现 call()方法,该 call()方法将作为线程执行体,并且有返回 值。

2. 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装 了该 Callable 对象的 call()方法的返回值。

3. 使用 FutureTask 对象作为 Thread 对象的target 创建并启动新线程。

4. 调用 FutureTask 对象的 get()方法来获得子线程执行结束后的返回值。

(3)说一下runnable和callable的区别 前者没有返回值,后者由返回值,并且可以通过get方法获取结束后的返回值。

25.线程有哪些状态

创建、就绪、运行、阻塞、死亡

1. 创建状态:生成线程对象,但还未调用start方法。

2. 就绪状态:调用了start方法后就进入了就绪状态,但是还未被调度成为当前线程,此时处于就绪 状态。在线程运行之后,从等待或睡眠中回来后,也会处于就绪状态。

3. 运行状态:线程调度程序将处于就绪状态的线程设置为当前线程,进入运行状态,开始运行run方 法中的代码。

4. 阻塞状态:线程正在运行的时候被暂停,通常是为了等待某个事件的发生之后再继续运行。 sleep、wait、suspend都可以导致线程阻塞。

5. 死亡状态:如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死 亡的线程,无法再使用start方法令其进入就绪状态。

26.sleep和wait有什么区别

sleep方法:是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程, 等休眠时间结束后进入就绪状态等待调度,不需要被唤醒。他不依赖于同步锁。

wait方法:是Object类的方法,当一个线程执行到wait方法时,他会依赖synchronized关键字,使得 其他线程额能够访问,可以通过notify、notifyAll方法来唤醒等待的线程。

(1)notify和notifyAll有什么区别 前者只随机唤醒一个等待池中的wait线程,后者可以唤醒等待池中的所有wait线程。 当有线程调用了对象的notifuAll或者notify方法,被唤醒的线程就会进入该对象的锁池中,等待竞争对 象锁。

(2)什么是等待池 当一个线程调用了某个对象的wait方法,该线程就会释放该对象的锁并进入到该对象的等待池中。

(3)什么是锁池 当一个线程已经拥有了某个对象的锁,那么其他的线程需要调用这个对象的某个synchronized方法,就 必须获取该对象的锁的拥有权,但是因为该对象锁已被拥有,那么这些线程就会进入该对象的锁池中。

27.线程的 run()和 start()有什么区别?

1. run方法称为线程体,start方法是用来启动线程的Thread类的方法。

2. start方法用来启动一个线程,真正实现了多线程运行;run方法是本线程中的,只是线程里的一个 函数,而不是多线程的。

3. 调用start方法后,线程进入就绪状态,而run方法是再运行状态是进行执行的线程体。 4. start方法执行后进入就绪状态,run方法体执行完后进入死亡状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

射手座的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值