环境
java1.8、idea2018、springboot
帮助人群
java软件工程师、java后端开发、准备面试的java软件开发、多线程
Callable和Future
Callable和Future解决了Runnable不能返回值或抛出异常的问题。
Future:可以用来查看任务的生命周期以及操作任务,如获取任务结果、取消任务
方法:
- cancel():尝试取消任务。
- isCancelled():
- isDone():
- get():返回计算结果。
- get(timeout):可以设置超时时间。
总结
- 多线程不要乱用,尽量先串行,当生产环境真的不能应付在考虑并行。
- 面试多线程时,多多结合实战跟面试官分讲讲。

线程池【概念复习】
作用:
(1)、通过重复利用线程,减少线程的创建销毁损耗的资源
(2)、提高响应速度,任务到达时,不用重新创建线程,之间可以使用已经创建好的线程执行。
(3)、提高线程的可管理性
ThreadPoolExecutor可配置项:
- 线程池初始大小
- 最大大小
- 存活时间

线程的开销
- 生命周期的开销:线程的创建、调度和生命周期管理都由操作系统实现,无论在哪款操作系统下,这些操作的开销都很可观。
- 内存占用:一个线程占用的栈资源大概在1-2M左右,那么线程数达到千级别时这个开销就很可观。
- 稳定性:不同操作系统和JVM配置下,线程数量将受到栈空间或系统的限制,过多的线程并不会再提升性能。
合理配置线程池大小
- 一般需要根据任务的类型来配置线程池大小:
- 如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU+1
- 如果是IO密集型任务,参考值可以设置为2*NCPU
当然,这只是一个参考值,具体的设置还需要根据实际情况进行调整,比如可以先将线程池大小设置为参考值,再观察任务运行情况和系统负载、资源利用率来进行适当调整。



本文深入探讨了Java中Callable和Future的使用,解决了Runnable接口无法返回值的问题,并详细介绍了线程池的概念及其在减少资源损耗、提高响应速度和线程管理性方面的作用。同时,文章提供了合理配置线程池大小的指导原则,适用于CPU密集型和IO密集型任务。
387

被折叠的 条评论
为什么被折叠?



