多线程-面试
多线程的概念:
进程:电脑中时不时的会有很多单独的运行的程序,每个程序都有一个独立的进程,而进程之间是相互独立存在的
线程:进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程至少有一个线程
线程里面两个很重要的概念:
串行:单条线程来执行多个任务,按照一定的顺序一个个执行
并行:多条线程同时执行某一个任务,在时间上是重叠的 eg:单刷boss和组队刷boss
线程安全: 当多个线程访问某个方法的时候,不管你通过怎样的调用方式、或者说这些线程如何交替的执行,我们在主程序中不需要去做任何的同步,这个类的结果行为都是我们设想的正确行为,那么我们就可以说这个类是线程安全的。
eg:boss掉落了一件装备,大家同时去拾取,只能有一个人先抢到。
如何保证线程安全
1.synchronized:synchronized关键字,就是用来控制线程同步的,保证我们的线程在多线程环境下,不被多个线程同时执行,确保我们数据的完整性,可以将这个关键字加载方法上面,也可以加载代码块上面。
2.ReentrantLock:ReentrantLock是咋java1.6的时候被引入进来的,使用它需要我们手动获取锁和释放锁,他提供终端获取以及超市获取的同步特性
3.Redis锁:结合setnx命令实现,指定的key不存在时,为key设置指定的值,设置成功返回1,设置失败返回0.
4.Redission:封装了redis很懂原生方法,并提供分布式环境的各种实现,RLock就是一个锁实现。
5.原子类:java.util,concurrent.atomic包下有很多封装好的原子类。
多线程的应用场景
1.map-reduce任务:多个线程运行map任务,可以是清晰数据、聚合数据等,在将处理后的数据reduce在一起。
2.群发短信、push、消息:平时的推广、活动通知之类的业务
3.下载、内容抓取:内容下载和一些信息内容抓取等业务
4.生产者消费者模式:应用内实现此模式就需要用到多线程,多个生产者和消费者。
多线程的实现方式
1.实现Runnable接口
2.继承Thread类
3.实现Callable接口
4.使用JDK自带Executor框架,不够灵活,有局限性
5.自定义配置ThreadPoolExector线程池,推荐
说一下你们在实际项目中是怎样使用线程池的,你的代码是怎么写的(面试有问到)
参考:https://www.cnblogs.com/xianz666/p/18420102
ThreadPoolExecutor的submit方法和execute方法的区别
ThreadPoolExecutor的submit会返回一个future的对象。我们可以通过这个future对象的get方法拿到多线程执行的一个结果。
ThreadPoolExecutor的excute方法执行完成后没有返回结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-03-27 win10电脑麦克风无法使用问题