多线程-面试

多线程的概念:

进程:电脑中时不时的会有很多单独的运行的程序,每个程序都有一个独立的进程,而进程之间是相互独立存在的

线程:进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程至少有一个线程

线程里面两个很重要的概念:

串行:单条线程来执行多个任务,按照一定的顺序一个个执行

并行:多条线程同时执行某一个任务,在时间上是重叠的 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方法执行完成后没有返回结果。

posted on   ~码铃薯~  阅读(68)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· 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电脑麦克风无法使用问题

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示