当然也有其他待解决方案,比如说coroutine,目前Kotlin已经支持了,JDK也已经有了相关的提案:Project Loom,目前的实现方式和Kotlin有点类似,都是基于ForkJoinPool,当然目前还有很多限制以及问题没解决,比如synchronized还是锁住当前线程等。
在Java中使用线程池的主要原因主要归结为以下几个方面:资源的有效使用: 创建和销毁线程是一项昂贵的操作,它涉及到与操作系统交互以获取必要的资源。使用线程池,可以在一定程度上复用这些资源,大大减少了创建和销毁线程的开销。
面试官问这个,主要想考察 为什么需要线程池?说明:Executors 返回的线程池对象的弊端如下:FixedThreadPool 和 SingleThreadPool: 允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。