多线程面试题

本文详细探讨了Java多线程的各个方面,包括线程的三个特性、线程状态、线程池的概念、同步与异步的区别、锁的类型、线程同步方法,以及synchronized与Lock的比较。此外,还讨论了线程池的优势、线程同步策略和监视器的内部运作,深入解析了线程同步方法与同步代码块的差异,并提供了创建线程的不同方式及其优缺点。
摘要由CSDN通过智能技术生成

一、 多线程的三个特性。

  • 1.原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(SCV,synchronized);
  • 2.可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);
  • 3.有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原则)。

二、请你简要说明一下线程的基本状态以及状态之间的关系?

  • Running表示运行状态;
  • Runnable表示就绪状态(万事俱备,只欠CPU)
  • Blocked表示阻塞状态,阻塞状态又有多种情况,可能是因为调用wait()方法进入等待池,也可能是执行同步方法或同步代码块进入等锁池,或者是调用了sleep()方法或join()方法等待休眠或其他线程结束,或是因为发生了I/O中断。
  • Dead表示当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。
    在这里插入图片描述

请你解释一下什么是线程池(thread pool)?

在面向对象编程中,创建和销毁对象是很费时间的,所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。

三、举例说明同步和异步

线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低
线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制。

四、引起线程上下文切换的原因

1、当前执行任务的时间片用完之后,系统CPU正常调度下一个任务
2、当前执行任务碰到IO阻塞,调度器将此任务挂起,继续下一任务
3、多个任务抢占锁资源,当前任务没有抢到锁资源,被调度器挂起,继续下一任务
4、用户代码挂起当前任务,让出CPU时间
5、硬件中断

五、请问当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值