java多线程---多线程原理

tech2025-05-01  4

多线程

线程模型

用户级线程(ULT)

用户程序实现,不依赖操作系统核心。应用提供创建,同步,管理线程的函数来控制用户线程 (自己管理)不需要用户态\核心态切换,速度快

内核级线程(KLT)

系统内核管理线程内核保存线程的状态和上下文信息线程的创建,管理和调度由内核完成进度比ULC慢 java使用的线程模型:内核级线程KLT

java线程池的七大参数

corePoolSize 常驻核心线程数maximumPoolSize 总线程数keepAliveTime 多余空闲线程的存活时间unit keepAliveTime的时间单位workQueue 任务队列threadFactory 表示生成线程池中线程的线程工厂handler 拒绝策略,当队列满了并且工作线程大于等于线程池的最大线程数拒绝
有界队列和无界队列

使用有界队列: 若有新的任务需要执行,如果线程池实际线程数小于corePoolSize,则优先创建线程,若大于corePoolSize,则会将任务加入队列。若队列已满,则在总线程数不大于maximumPoolSize的前提下,创建新的线程,若线程数达到maximumPoolSIze,则执行拒绝策略 使用无界队列: 与有界队列相比,除非资源耗尽,否则无界队列不存在任务入队失败的情况,实际线程数大于corePoolSIze,任务直接进入队列等待

并行和并发的区别 并发:具有处理多个任务的能力,但不一定是同时进行。比如 吃饭时来了电话,停止吃饭去接电话 并行:具有同时处理多个任务的能力,是同时。比如 吃饭时来了电话,边吃饭边接电话

守护线程:专门服务于其他线程的线程

JDK四大拒绝策略

AbortPolicy:直接抛出异常组织系统正常工作 CallerRunsPolicy:只要线程池未关闭,该策略直接在调用者线程中,运行当前被丢弃的任务 DiscardOldestPolicy:丢弃最老的一个请求,尝试再次提交当前任务 DiscardPolicy:丢弃无法处理的任务,不给予任何处理 如果需要自定义拒绝策略可以实现RejectedExecutionHandler接口

线程池的五种生命状态

RunningShutdownStopTidying 所有的任务已经终止Terminated 线程池彻底终止
最新回复(0)