面试 Java 框架八股文五问五答第三期
2023-12-29 13:07:04
面试 Java 框架八股文五问五答第三期
相信看了本文后,对你的面试是有一定帮助的!
?点赞?收藏?不迷路!?
1)什么是线程池?
线程池是一种管理和复用线程的机制。它通过预先创建一组线程,并使用这些线程来执行任务,从而避免了频繁创建和销毁线程的开销,提高了系统的性能和资源利用率。
2)怎么使用线程池?
- 创建线程池对象,指定线程池的大小和其他参数。
- 提交任务给线程池,可以是Runnable或Callable对象。
- 线程池会自动从线程池中获取空闲的线程来执行任务。
- 当任务执行完成后,线程会返回线程池,可以继续执行其他任务。
3)线程池有哪些参数?
- 核心线程数(corePoolSize):线程池中保持的最小线程数。
- 最大线程数(maximumPoolSize):线程池中允许的最大线程数。
- 空闲线程存活时间(keepAliveTime):当线程池中的线程数量超过核心线程数时,多余的空闲线程的存活时间。
- 任务队列(workQueue):用于存放待执行的任务的队列。
- 线程工厂(threadFactory):用于创建新线程的工厂。
4)线程池底层工作原理
- 当有任务提交给线程池时,线程池会首先尝试使用空闲线程来执行任务。
- 如果空闲线程数量不足,且当前线程数小于最大线程数,线程池会创建新的线程来执行任务。
- 如果当前线程数已达到最大线程数,并且任务队列已满,线程池会根据设定的拒绝策略来处理任务。
- 当线程池中的线程空闲一段时间后(根据keepAliveTime设定),多余的线程会被销毁,以保持线程池中的线程数量在核心线程数范围内。
5)常见的线程安全并发容器有哪些?
- ConcurrentHashMap:线程安全的哈希表。
- CopyOnWriteArrayList:线程安全的动态数组。
- BlockingQueue:线程安全的阻塞队列。
- ConcurrentLinkedQueue:线程安全的链表队列。
- ConcurrentSkipListSet:线程安全的有序集合。
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) throws Exception {
// 创建线程池对象,大小为10
ExecutorService executor = Executors.newFixedThreadPool(10);
// 创建线程安全的哈希表
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
// 提交10个任务给线程池
for (int i = 1; i <= 10; i++) {
final int taskNum = i;
executor.submit(new Runnable() {
public void run() {
// 线程安全的putIfAbsent方法
map.putIfAbsent("key" + taskNum, taskNum);
System.out.println("Task " + taskNum + " is running.");
}
});
}
// 关闭线程池
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
// 输出哈希表中的内容
System.out.println(map);
}
}
文章来源:https://blog.csdn.net/qq_67358181/article/details/135287420
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!