多线程高并发常见的面试题

java多线程与并发常见面试题总结

并发编程的优缺点

为什么要使用并发编程(并发编程的优点)

  • 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升
  • 方便进行业务拆分,提升系统并发能力和性能:在特殊的业务场景下,先天的就适合于并发编程。现在的系统动不动就要百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程极致可以大大提高系统整体的并发能力以及性能。面对复杂的业务模型,并行程序会比串行程序更适合业务需求,而并发编程更能吻合这种业务拆分

并发编程有什么缺点

并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如:内存泄漏,上下文切换,线程安全,死锁等问题

并发编程三要素是什么?在Java程序中怎么保证多线程的运行安全?

并发编程的三要素(线程的安全性问题体现在)

  • 原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败
  • 可见性:一个线程对共享变量的修改,另一个线程能够立刻看到
  • 有序性:程序执行的顺序按照代码的先后顺序执行(处理器可能会对指令进行重排序)

出现线程安全的原因:

  • 线程切换导致的原子性问题
  • 缓存导致的可见性问题
  • 编译优化带来的重序性问题

解决方法:

  • JDK Atomic开头的原子类,synchronized,LOCK,可以解决原子性问题
  • synchronized,volatile,LOCK,可以解决可见性问题
  • Hapeens-Before规则可以解决有序性问题

什么是多线程,多线程的优劣?

多线程:多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务

多线程的好处:

可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其他的线程而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完成各自的任务

多线程的劣势

  • 线程也是程序,所以线程需要占用内存,线程越多占用内存也越多
  • 多线程需要协调和管理,所以需要CPU时间跟踪线程
  • 线程之间对共享资源的访问会相互影响,必须解决竟用共享资源的问题

线程和进程的区别

什么是线程和进程

进程

一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程

线程

进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以共享数据

进程与线程的区别

线程具有许多传统进程所具有的特征,故又称为轻型进程(Light-Weight Process)或进程元,而把传统的进程称之为重型进程(Heavy-Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程

**根本区别:**进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位

**资源开销:**每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小

**包含关系:**如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程

**内存分配:**同一个进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

**影响关系:**一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮

**执行过程:**每个独立的进程都有程序运行的入口,顺序执行序列和程序出口。但是线程不能独立执行,必须依存在于应用程序中,有应用程序提供多个线程执行控制,两者均可并发执行

什么是线程死锁

死锁是指两个或两个以上的进程(线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时成系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)

多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期的阻塞,因此程序不可能正常终止

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

  1. 互斥
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值