面试大白话,消化八股文-多线程篇

1. 什么是线程和进程?

  • 进程是资源分配的单位。
  • 线程是资源调度的单位。

2. 线程与进程的关系、区别和优缺点

  • 线程是进程中的一个执行单元,一个进程可以包含多个线程。
  • 线程共享进程的资源,但拥有自己的程序计数器、栈和局部变量。

区别:

  • 资源分配:进程是资源分配的基本单位,线程是资源调度的基本单位。进程拥有独立的地址空间,而线程共享进程的地址空间。
  • 通信:线程间通信相对简单,因为它们共享地址空间;进程间通信需要特定的 IPC 机制(如管道、消息队列等)。
  • 系统开销:线程的创建和切换开销小于进程,因为线程共享进程的资源。

优缺点:

  • 线程优点:创建和切换开销小,通信简单,可以提高资源利用率和程序响应速度。
  • 线程缺点:线程间共享资源可能导致数据不一致,需要同步机制;一个线程的异常可能影响整个进程。
  • 进程优点:进程间相互独立,一个进程的异常不会影响其他进程。
  • 进程缺点:创建和切换开销大,通信复杂。

3. 同步和异步的区别

  • 同步:一个任务必须等待前一个任务完成后才能开始执行。同步操作通常会导致调用者被阻塞,直到操作完成。
  • 异步:一个任务可以在后台执行,同时其他任务继续执行,不必等待异步操作完成。异步操作通常不会阻塞调用者,而是通过回调函数、事件或其他机制通知操作完成。

4.项目中有使用多线程吗?为什么要使用多线程?

  • 多线程可以提高程序性能和响应速度。
  • 实现任务的并发执行和更好的资源利用。

5.线程安全和不安全的理解

  • 线程安全:多线程访问共享资源时,保持资源正确且不受干扰。
  • 线程不安全:没有适当同步措施,导致资源错误。

6. 什么是线程死锁?如何避免死锁?

  • 线程死锁:线程相互等待资源,导致无法继续执行。
  • 避免死锁的方法:避免嵌套锁、按顺序加锁、死锁检测和恢复策略、锁超时。

7. 可以直接调用 Thread 类的 run 方法吗?

  • 可以直接调用 Thread 类的 run 方法,但这只是将 run 方法作为普通方法执行,并不会创建新的线程。要创建一个新的线程,需要调用 Thread 类的 start 方法,这将启动线程并调用 run 方法。

8. volatile 关键字的作用

  • 保证可见性:当一个共享变量被 volatile 修饰时,它会保证修改的值被立即更新到主内存,确保多线程访问数据的可见性,避免出现线程读取到过期数据的问题。
  • 防止指令重排序:程序执行时,为了提高性能,编译器和处理器会对指令进行重新排序。volatile 关键字可以避免指令重排序,确保按照设定的顺序执行指令。
  • 提供轻量级同步机制:虽然 volatile 关键字不能代替 synchronized 关键字来实现线程同步,但是对于某些简单的场景,比如单例模式的双重检查锁定,使用 volatile 关键字可以实现轻量级的同步策略,提高程序性能。

9. synchronized 是什么?有什么用途?

  • synchronized 是 Java 中的一个关键字,用于实现同步机制,确保多个线程在访问共享资源时能够保证数据的一致性和完整性。
  • synchronized 可以修饰方法,也可以作为同步代码块的关键字。当一个线程进入 synchronized 修饰的方法或代码块时,会获取一个锁,其他线程必须等待锁被释放才能进入临界区。

10. 什么是乐观锁和悲观锁?

  • 乐观锁:假设无冲突,适用于读多写少的场景。
  • 悲观锁:假设有冲突,适用于写多的场景。

猫托夫斯基

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值