10道精选Java面试题附答案

本文列举了10道关于Java多线程并发的经典面试题,涵盖线程与进程的区别、上下文切换、死锁、活锁、饥饿的概念,以及Executor框架、阻塞队列、Callable与Future、竞争条件、线程启动和唤醒等知识点,旨在帮助读者深入理解Java并发编程。
摘要由CSDN通过智能技术生成

1、线程与进程的区别?
  进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。
  一个程序至少有一个进程,一个进程至少有一个线程。
  
2、什么是多线程中的上下文切换?
  多线程会共同使用一组计算机上的CPU,而线程数大于给程序分配的CPU数量时,为了让各个线程都有执行的机会,就需要轮转使用CPU。不同的线程切换使用CPU发生的切换数据等就是上下文切换。

3、死锁与活锁的区别,死锁与饥饿的区别?
  死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的必要条件:
  互斥条件:所谓互斥就是进程在某一时间内独占资源。
  请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。
  循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
  活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。
  活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”,而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。
  饥饿:一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态。
  Java中导致饥饿的原因:
  高优先级线程吞噬所有的低优先级线程的CPU时间。
  线程被永久堵塞在一个等待进入同步块的状态ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值