JAVA进阶之路——无奖问答挑战2

JAVA问答第二篇

引言

这里引用b站JAVA韩顺平说过的话鼓励大家

万丈高楼平地起,辉煌还得靠自己

我与大家一起坚持,不要放弃啊!


Q1:为什么要用线程池?

  • 如果不使用线程池,频繁地创建和销毁线程会带来巨大的系统开销。线程池主要解决了以下三个问题:
    降低资源消耗:通过复用已创建的线程,减少了线程创建和销毁所带来的CPU和内存开销。
  • 提高响应速度:任务到达时,无需等待线程创建,直接由池中空闲线程执行,响应极快。
  • 提高可管理性:线程是稀缺资源,无限制创建会导致系统崩溃。线程池可以统一管理线程生命周期,控制最大并发数,甚至进行监控和统计。

Q2:线程池的核心组成部分是啥?

一个标准的线程池通常由以下三部分组成:

  1. 线程池管理器:负责创建、销毁线程池,以及分配任务。
  2. 工作线程(Worker Threads):实际执行任务的线程,执行完任务后不会死亡,而是返回池中等待。
  3. 任务队列(Task Queue):当所有线程都在忙碌时,新来的任务会先被放入这个队列中排队等待。

Q3:讲讲线程池的参数?

参数名 说明
corePoolSize 核心线程数。常驻线程,即使空闲也不会被销毁(除非开启特殊配置)。
maximumPoolSize 最大线程数。线程池能容纳的线程总数上限(核心+临时)。
keepAliveTime 存活时间。非核心线程(临时工)空闲时的存活时间,超时会被回收。
workQueue 工作队列。核心线程满时,任务会进入队列等待。
handler 拒绝策略。队列满且线程数达到最大值时,新任务的处理方式。

Q4: 线程池的工作流程是啥?

当一个新任务提交给线程池时,它会按照以下顺序进行处理:

  1. 优先分配给核心线程:如果当前运行的线程数少于 corePoolSize,线程池会创建新线程来执行任务(即使有空闲线程),直到达到核心线程数。
  2. 尝试入队:如果核心线程都在忙,线程池会尝试将任务放入 workQueue 队列。
  3. 扩容非核心线程:如果队列也满了,且当前线程数小于 maximumPoolSize,线程池会创建"非核心线程"来执行任务。
  4. 触发拒绝策略:如果线程数达到最大值且队列也满,线程池会启动拒绝策略(如抛出异常、丢弃任务、或由调用者线程自己执行等)。

Q5:HTTP与HTTPS的区别?

比较维度 HTTP HTTPS
安全性 低(明文传输,数据裸奔) 高(加密传输,防窃听/篡改)
默认端口 80 端口 443 端口
协议基础 基于 TCP 协议 HTTP + SSL/TLS 加密层
证书要求 不需要证书 需要向 CA 机构申请数字证书
SEO 排名 较低(被搜索引擎降权) 较高(搜索引擎优先收录)
相关推荐
551只玄猫29 分钟前
【数学建模 matlab 实验报告12】聚类分析和判别分析
开发语言·数学建模·matlab·课程设计·聚类·实验报告
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey2 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
一定要AK7 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao7 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao7 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024067 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨7 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9997 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4947 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源