0
点赞
收藏
分享

微信扫一扫

并发面试题总结(1)

天使魔鬼 2022-04-30 阅读 88
面试java

1. 并发编程的缺点

优点:
	1. 充分利用多核CPU的计算能力,使性能得到提升
	2. 方便进行业务拆分,提升系统并发能力和性能

缺点:
	可能会造成内存泄漏,上下文切换,线程安全,死锁等问题

2. 并发编程的目的

提高程序的执行效率,提高程序运行速度

3. 什么叫线程安全,servlet是线程安全吗?

线程安全:某个方法在多线程环境被调用时,能够正确处理多个线程之间的共享变量,使程序功能正确完成。

servlet是非线程安全的,servlet是单实例多线程的,
当多个线程同时访问同一个方法时,是不能够保证共享变量的线程安全性的。

4. 并发编程的三要素是什么

1. 原子性:一个或多个操作要么全部执行成功,要么全部执行失败
2. 可见性:一个线程对共享变量的修改,另一个线程能够看见
3. 有序性:程序执行的顺序按照代码的先后顺序执行,避免指令重排

5. 出现线程安全问题的原因:

1. 线程切换带来的原子性问题
2. 缓存导致的可见性问题
3. 编译优化带来的有序性问题

解决办法:
	1. JDK Atomic开头的原子类,synchronized,lock可以解决原子性问题
	2. volatile,synchronized,lock可以解决可见性问题
	3. volatile,Happens-Before规则可以解决有序性问题

6. 串行,并发,并行的区别

1. 串行:多个任务在一个线程上按顺序执行,由于任务都在一个线程上执行,
		所以不存在线程不安全的情况,也就不存在临界区的问题

2. 并发:多个任务在一个CPU核上按细分的时间片轮流交替执行,从逻辑上看那些任务是同时执行的

3. 并行:单位时间内,多个CPU同时处理多个任务,是真正意义上的同时执行

7. 什么是线程和进程

1. 进程:一个在内存中运行的应用程序
		每个进程都有自己独立的一块内存空间,一个进程可以有多个线程

2. 线程:进程中的一个执行任务,负责当前进程中程序的执行

8. 进程和线程的区别

1. 根本区别:进程是操作系统资源分配的基本单位

		    线程是处理器任务调度和执行的基本单位

2. 资源开销和内存分配:每个进程都有独立的内存空间,进程之间的切换会有较大的开销

			        线程可以看作是轻量级的进程,同一类线程共享代码和数据空间,
			        每个线程都有自己独立的运行栈和程序计数器,线程之间的切换的开销小

3. 包含关系:线程是进程的一部分
		    一个进程至少有一个线程,一个进程可以运行多个线程

4. 影响关系:一个进程奔溃后,在保护模式下,不会对其他进程产生影响
		    一个线程奔溃后,整个进程都死掉,因此,多进程要比多线程健壮

5. 执行过程:每个独立的进程有程序入口,顺序执行序列和程序出口
		    线程不能独立执行,必须依存在进程中,由进程提供多个线程执行控制,两者均可并发执行

9. 什么是上下文切换

当前任务执行完CPU时间片切换到另一个任务之前会先保存自己的状态
以便下次再切换回这个任务时,可以再加载这个任务的状态
任务从保存到再加载的过程就是一次上下文切换

10. 守护线程和用户线程有什么区别

1. 用户线程:运行在前台,执行具体的任务,如程序的主线程,连接网络的子线程等都是用户线程
2. 守护线程:运行在后台,为其他前台线程服务,一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作

11. 什么是线程死锁

两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,
若无外力作用,他们都将无法推进下去,这种永远在互相等待的线程称为线程死锁。

12. 形成死锁的四个必要条件是什么

1. 互斥条件:线程对于所分配的资源具有排他性,即一个资源只能被一个线程占用,直到被该线程释放
2. 请求与保持条件:一个线程因请求被占用资源而发生阻塞时,对以获得的资源保持不放
3. 不剥夺条件:线程以获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才能释放资源
4. 循环等待条件:当发生死锁时,所等待的线程必定会形成一个环路,造成永久阻塞

13. 如何避免线程死锁

破坏形成死锁的四个必要条件中的一个就可以了

1. 破坏互斥条件:这个条件无法破坏,因为我们用锁本来就是想让他们互斥的
2. 破坏请求与保持条件:一次性申请所有的资源,会降低并发能力,一般不破坏请求与保持条件
3. 破坏不剥夺条件:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源
4. 破坏循环等待条件:靠按序申请资源来预防,按某一顺序申请资源,释放资源则反序释放
举报

相关推荐

0 条评论