Java面试系列-线程相关(一)
实现多线程的方式
-
继承Thread类,重写run方法,调用start方法启动线程 -
实现Runnable接口,重写run方法,调用start方法启动线程 -
实现Callable接口,重写call方法,并用FutureTask包装,在new Thread中传入FutureTask,然后调用start方法启动线程 -
使用线程池
保证线程安全的方式
-
synchronized关键字实现的同步方法或者同步代码块 -
ReentrantLock等实现的锁机制 -
volatile关键字实现的变量线程安全 -
使用AtomicInteger等原子类 -
使用ConcurrentHashMap等线程安全容器
线程有哪些状态?
五个状态:初始化(New)、可运行(Runnable)、运行中(Running)、阻塞(Blocked)、死亡(Dead)。
线程池的7个参数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
-
corePoolSize 核心线程数:一直存活的核心线程,不会销毁。 -
maximumPoolSize 最大线程数:提交一个任务,会先进入工作队列,如果队列无法加入,会创建新线程,然后从工作队列中取出一个任务交给新线程来处理,而刚提交的任务会进入工作队列。如果创建新线程导致线程数量超过最大线程,则会执行拒绝策略。 -
keepAliveTime 空闲线程存活时间:当线程数大于核心线程数时,空余线程等待新任务的最长时间。 -
unit 空闲线程存活时间单位 -
workQueue 工作队列 -
threadFactory 线程工厂:创建线程使用的工厂,可以用来指定线程名字。 -
handler 拒绝策略
工作队列:有四种
-
ArrayBlockingQueue:基于数组的有界阻塞队列,FIFO。 -
LinkedBlockingQuene:基于链表的无界阻塞队列,FIFO。如果指定长度可以充当有界队列,不指定长度则默认Interger.MAX,相当于是无界的。 -
SynchronousQuene:不缓存任务的阻塞队列,相当于没有队列。 -
PriorityBlockingQueue:具有优先级的无界阻塞队列。
拒绝策略:工作队列无法加入新任务,且线程数量达到最大线程数,则采用拒绝策略。也有四种
-
AbortPolicy:默认策略,直接丢弃任务,并且抛出异常。 -
CallerRunsPolicy:调用者直接执行拒绝任务的run方法。 -
DiscardPolicy:直接丢弃任务,啥都不做。 -
DiscardOldestPolicy:抛弃队列中最早的任务,并将当前任务放入队列。
线程池最多能同时处理多少个任务?
如果工作队列是有界队列,则最多:工作队列长度+最大线程数;如果工作队列是无界队列,则最多是无限个。
Executors工具类有哪几种构造线程池的方法?
-
newFixedThreadPool:创建固定大小的线程池。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。 -
newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。 -
newSingleThreadExecutor:创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。 -
newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。 -
newSingleThreadScheduledExecutor:创建一个单线程的线程池。此线程池支持定时以及周期性执行任务的需求。
JVM中哪些区域线程共享,哪些线程私有?
-
线程共享:方法区、堆 -
线程私有:Java栈、本地方法栈、程序计数器
2020-08-07
2020-08-02
2020-07-23
2020-07-05
2020-06-18
本文分享自微信公众号 - pipi蛋(pipidan_fuyun)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
12 周年庆,这 100 本热门技术图书送了!
前几天是开源中国上线 12 周年的日子,除了收到来自四面八方的祝福之外,也有收到了来自合作伙伴们的礼物。 在此前AI资料包活动中备受欢迎的技术书籍在此次周年庆活动中再度出现,但图书数量有限,小编在这里就给大家介绍一下怎么能得到这些热门技术书籍~ 【攻略一】8.31-9.7期间,参与社区福袋活动,通过关注专区、发表博客、问答、入驻源创计划等方式可以随机获得兑换券,集齐兑换券即可兑换实物书籍啦~ 详细攻略点这里:12周年活动攻略 【攻略二】参与开源中国微博抽奖活动,有机会获得热门技术书籍。 微博活动传送门:点这里参与微博抽奖 接下来小编就给大家介绍一下这次周年庆活动具体都有哪些书籍👇 ——————————博文视点—————————— 《集成学习:基础与算法》 周志华 著 李楠 译 l 周志华教授专著 l 豆瓣10分满星,国内独本剖析集成学习的著作 l 森林书破解AI实践难题 《设计模式就该这样学:基于经典框架源码和真实业务场景》 谭勇德(Tom)著 l 多年“踩坑填坑”和“教学答疑”经验总结 l 独创基于经典框架源码和真实业务场景讲设计模式 l 含JDK、Spring、MyBatis、T...
- 下一篇
picbed 1.10 已发布
picbed是一款基于Python Flask的简洁不小气的web图床,本次v1.10结合1.9.1更新如下: 功能: Layui页面封装了一个简洁美观的消息通知模块 message 通过 push_user_msg 推送给用户消息 支持用户自行删除账号 新增接口支持导入网络图片 用户上传图片支持设置默认相册 用户个人图片的RSS Feed misc/cli.py输出风格支持编写函数以定制输出 js sdk(uploader.js)支持title并取消上传容量限制 修复: 多线程下管理员控制台加载钩子扩展时常出现的数据不足的问题 修复与优化控制台版本升级提示(由服务端判定,以符合语义化2.0标准) 更改: 触发管理员消息通知与用户消息通知的方法分别置于不同引用模板 上传图片接口成功时响应的数据增加sha字段(图片唯一标识) 更改upimg_stream_processor钩子 1.9.0新增时最终只能有一个钩子成功处理,更改为所有钩子累加处理。 示例:两个钩子分别进行了裁剪处理、水印处理,最终图片有水印且裁剪过尺寸。 优化: 上传图片的容量可由配置参数MaxUpload控制,默认20M...
相关文章
文章评论
共有0条评论来说两句吧...