当前位置: 首页 > article >正文

学习-java多线程面试题

为什么不建议用Executors启动线程池


*队列LinkedBlockingQueue是没有边界的队列,请求多会造成OOM
*建议使用ThreadPoolExecutors

线程池中提交一个任务的流程?

1先判断线程池是否有线程,如果与就直接执行,没有就放队列
2如果队列满了,就拒绝(代码要做处理)

 

线程池有的状态

1. Running(运行状态):线程池已经创建并且正在运行,可以接受新的任务并处理已提交的任务。 
 2. Shutdown(关闭状态):线程池不再接受新的任务,但会继续处理已提交的任务,直到所有任务完成。在关闭状态下,线程池不会创建新的线程。 
 3. Stop(停止状态):线程池不再接受新的任务,并且会中断正在执行的任务。它会尝试终止所有的工作线程。 
 4. Tidying(整理状态):所有的任务都已经终止,工作线程数量已经降为零。线程池会进行一些清理工作,例如关闭底层线程池等。 
 5. Terminated(终止状态):线程池已经完全终止,不再接受任务,也不会处理已提交的任务。  

优雅的停止线程

*stop(),释放synchronized,不会释放RreetranLock
*建议用字段(再线程做判断)
*用全局变量控制

tomcat是如何定义线程的

*tomcat中线程池走构造就会启动所有核心线程池
*tomcat的思想优先启动线程,线程达到上线才加入队列

线程池怎么设置核心线程数和最大线程数

*先看是CPU密集型 还是IO密集型,或者是混合型
*CUP密集可以+1
*IO密集可以X2
*核心业务可以多,非核心可以少,
*最终还是要压测得到合适的


 

volatile修饰的变量可以多线程可见

并发中的原则性要加锁实现

产生死锁的原因


1资源只能被一个线程使用
2线程阻塞 不释放被占用资源
3若干线程头尾相连的循环等待资源关系
建议:加锁顺序 。 设置超时时间,死锁检查

sychronize和ReetrantLock的区别

Java 中主要有以下几种锁: 


 *互斥锁(synchronized)**:互斥锁是 Java 中最常用的锁,它可以保证同一时间只有一个线程可以访问某个资源。 
*读写锁(ReentrantReadWriteLock)**:读写锁可以同时允许多个线程读取一个资源,但只有一个线程可以写入该资源。 
*公平锁(FairLock)**:公平锁保证等待时间最长的线程可以最先获得锁。 
*非公平锁(NonfairLock)**:非公平锁不保证等待时间最长的线程可以最先获得锁。 
*自旋锁(SpinLock)**:自旋锁是不需要操作系统参与的锁,它可以提高锁的性能。   耗cpu  建议在时间短的用 
*乐观锁(OptimisticLock)**:乐观锁假设在大多数情况下,多个线程不会同时访问同一个资源,因此它不会对资源进行加锁。 
如果需要保证同一时间只有一个线程可以访问某个资源,那么可以使用互斥锁。如果需要同时允许多个线程读取一个资源,但只有一个线程可以写入该资源,那么可以使用读写锁。如果需要保证等待时间最长的线程可以最先获得锁,那么可以使用公平锁。如果不需要保证等待时间最长的线程可以最先获得锁,那么可以使用非公平锁。如果需要提高锁的性能,那么可以使用自旋锁。如果需要在读操作时不加锁,那么可以使用乐观锁
 


 

from


https://www.yuque.com/tulingzhouyu/sfx8p0/dr3wi1f7uxi961uo?singleDoc#  密码:bghr


http://www.kler.cn/news/156388.html

相关文章:

  • 在 Linux 上修改 Oracle 控制文件、日志文件和数据文件的目录的脚本
  • Rust UI开发(五):iced中如何进行页面布局(pick_list的使用)?(串口调试助手)
  • (一)舒尔特表练习记
  • 新手村之SQL——函数多表联结
  • rman SBT_TAPE NFS disk 模拟NBU带库 FRA
  • Android跨进程通信,binder,native层,服务端在servicemanager注册服务
  • 【FAQ】运动健康服务端侧数据常见问题及解答
  • Android 透明度颜色值对照表
  • Apache Flink(六):Apache Flink快速入门 - Flink案例实现
  • SpringBoot框架结合Redis实现分布式锁
  • Mover Creator 用户界面
  • 【设计模式】职责链模式设计在线文档帮助系统
  • 销售员怎样才能做到让客户主动来找?
  • (C++)和为s的两个数字--双指针算法
  • CDA level-2 备考经验分享 转数据分析师CDA证书备考 考试相关说明
  • ZYNQ_project:HDMI
  • ubantu配置网卡ip
  • 数据库管理-第122期 配置Halo数据库(202301204)
  • 前后端数据传输格式(下)
  • 日志检索场景ES->Doris迁移最佳实践:函数篇
  • Python+OpenCV实现最强自动扫雷
  • 算法基础--双指针
  • 深度学习——第3章 Python程序设计语言(3.2 Python程序流程控制)
  • PAD平板签约投屏-高端活动的选择
  • C++基础介绍及关键字
  • PHPExcel 导出Excel报错:PHPExcel_IOFactory::load()
  • 分享74个节日PPT,总有一款适合您
  • 【部署】Deploying Trino on linux
  • C++ string类(2)—成员访问、插入、删除、替换、查找和交换操作
  • 免费数据采集软件,多种数据采集方式