面试-Java线程池

1.利用Excutors创建不同的线程池满足不同场景的需求
分析:
如果并发的请求的数量非常多,但每个线程执行的时间非常短,这样就会频繁的创建和销毁线程。如此一来,会大大降低系统的效率。 可能出现,服务器在为每个线程创建和销毁线程所消耗的系统资源要比处理实际用户请求的时间更多。那么,有没有一种方法可以重复的利用线程去完成新的任务呢。

在这里插入图片描述
2.Fork/Join框架
Java7提供的并行执行任务的框架。
在这里插入图片描述
分析:
Fork/join分别将这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务。会出现有的队列里的任务以及完成,其他队列里的任务还没有完成,会导致已经完成任务的线程会被闲置 。解决方法:空闲的线程会从busy的线程处窃取 等待执行的任务;为了减少窃取任务线程以及被窃取任务线程之间的竞争,一般会使用双端队列,被窃取任务的线程永远从双端队列的头部来任务执行,窃取任务线程永远从双端队列的尾部来任务执行。

3.为什么要使用线程池
在这里插入图片描述
通过重复利用已经创建的线程,来降低线程创建和销毁的消耗。
使用线程池可以统一的调用分配,调优和监控。

4.Executor框架
在这里插入图片描述
是根据一组执行策略调用,调度,执行和控制的异步任务的框架。目的是将任务提交与任务如何运行提交分离开来的机制。
在这里插入图片描述
在于其高度的可调节性与灵活性,以尽量满足复杂多变的实际应用场景。
Executors则从简化使用的角度,为码农们提供了各种方便的静态工厂的方法。
在大多数场景下,使用executors提供的5类场景就可以了。

5.启动线程的方式
在这里插入图片描述
6.使用ThreadPoolExecutor等构造函数去创建复杂的线程池
在这里插入图片描述
分析:
WorkQueue(工作队列):存储用户提交的各个任务。
WoringThreads:工作线程的集合,管理线程的销毁与创建。NewcachedThreadPool,任务压力大,线程池会创建新的工作线程。任务量变小的时候,线程池会闲置一段时间后,结束工作线程。线程池的工作线程被抽象为静态内部类worker.Threadpool维护的就是一组worker对象。
ThreadFactory提供线程池所需的创建线程的逻辑。
如果任务提交被拒绝,比如线程池处于shutdown状态,线程任务需要由处理机制来处理。Java标准库里提供类似ThreadPoolExecutor.aboredpolicy等默认实现。还可按照实际情况扩展自定义相关的处理机制,也就是实现RejecExecutionHandler这个接口。

(1)ThreadPool构造函数:
在这里插入图片描述
CorePoolSize:根据不同的线程池设定不同的数量。(可以看Executors里的关于5大线程池的源码)
当任务提交时,如果线程池中的线程数量大于或等于corePoolSize时,把该任务封装成worker对象,放在等待队列中。

(2)线程池的饱和策略:
在这里插入图片描述
在这里插入图片描述
7.线程池状态:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker创建容器时提示 [Warning] IPv4 forwarding is disabled. Networking will not work.

解决办法 1. 在docker的宿主机中更改以下文件: [rootlocalhost ~]# vi /usr/lib/sysctl.d/00-system.conf2. 添加如下代码: net.ipv4.ip_forward13. 重启network服务: systemctl restart network

Lua 垃圾回收

Lua 垃圾回收 Lua 是一种轻量级的编程语言,广泛用于游戏开发、脚本编写和其他应用程序。Lua 的设计哲学是简单和高效,这同样体现在它的内存管理机制中。在 Lua 中,垃圾回收(Garbage Collection,简称 GC)是…

利用powershell开展网络钓鱼

要确保人们打开我们的恶意文件并执行它们,我们只需让微软努力工作多年来赢得人们的信任,然后将一些危险的宏插入到幻灯片中。 本博文将介绍如何通过屏幕顶部的一个友好的警告提示,在用户启用宏后立即运行您的宏。 首先,我们需要打…

【面向对象】复习(四)

const构不构成重载 C 加const能不能构成重载的几种情况_多个const修饰可以重载吗-CSDN博客

如何在Java中实现并发编程,包括锁机制、线程池等。

在Java中实现并发编程有很多种方式,包括使用锁机制、线程池等。以下是一些基本的步骤和代码示例: 1. **锁机制**:Java提供了多种锁机制,包括ReentrantLock,synchronized关键字等。ReentrantLock是一个可重入的锁&…

[分布式网络通讯框架]----MprpcApplication实现

在之前我们提到了很多回MprpcApplication类&#xff0c;这是一个mprpc框架的初始化类。 在此之前&#xff0c;先来看看MprpcConfig 类 MprpcConfig 类 重要成员变量 std::unordered_map<std::string,std::string> m_configMap;存放配置信息键值对。 本项目配置信息 …

Spring Boot中的国际化(i18n)实现技巧

Spring Boot中的国际化&#xff08;i18n&#xff09;实现技巧 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在开发多语言支持的应用程序时&#xff0c;国际化…

python环境变量

目录 python环境变量 python-opencv cuda cudnn pytorch pycharm 激活ok了 pyqt5 labelimg notepad gpu-z python 3.6或3.7 标注,文件路径不能有 python环境变量 import os import syscurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(…

浏览器扩展V3开发系列之 chrome.commands 快捷键的用法和案例

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.commands API 允许开发者使用快捷键来执行特定的命令。 在使用 chrome.commands API 之前必须…

Vue 学习之 axios

目录 执行安装命令&#xff1a;npm install axios 使用的时候导入 axios以data&#xff0c;params&#xff0c;headers传参方式的区别 axios封装 是一个基于 promise 的 网络请求库&#xff0c;作用于浏览器和 node.js 中。使用Axios可以在前端项目中发送各种方式的HTTP请求…

如何查看websocket连接信息

Chrome 浏览器中查看 webSocket 连接信息_谷歌浏览器看不到 websocket-CSDN博客 Getting Started — Flask-SocketIO documentation 运作原理 | Socket.IO

VS Code准备JAVA环境

背景 由于IntelliJ IDEA是需要激活码的,简单的java demo测试,除了可以直接使用命令行java和javac进行执行, 推荐使用VS code, 其功能比较强大,扩展插件也比丰富,对阅读和书写代码都是比较友好的. JDK环境准备 Linux JDK可以使用Open JDK 11. sudo apt-get install openjdk-1…

Git+Maven+Jenkins的增量发布

项目结构大致如下&#xff1a; platform-server ├─doc ├─platform-base ├─platform-bom-dependencies ├─platform-commons │ ├─platform-commons-core │ ├─platform-commons-dubbo │ ├─platform-commons-geo │ ├─platform-commons-lang │ ├─platf…

UE引擎实现ShadowMap、体积光(C++)

前言 整体上参考了YivanLee大佬的这两篇文&#xff1a; 虚幻4渲染编程&#xff08;灯光篇&#xff09;【第一卷&#xff1a;各种ShadowMap】 虚幻4渲染编程&#xff08;灯光篇&#xff09;【第二卷&#xff1a;体积光】 正文 1、ShadowMap &#xff08;1&#xff09;创建工…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

C++设计模式---模版方法模式

1、介绍 概念&#xff1a; 模板方法模式&#xff08;Template Method Pattern&#xff09;【行为型模式】&#xff0c;定义一个操作中算法的骨架&#xff0c;而将一些步骤延迟到子类中&#xff0c;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 …

AI绘画Stable Diffusion人物背景替换实操教程,让创意无限延伸

大家好&#xff0c;我是画画的小强 Stable Diffusion以其强大的能力可以实现人物背景的更换。本文将带你深入了解如何利用Stable Diffusion中的Inpaint Anything插件快速且精准地实现人物背景的替换&#xff0c;从而让你的图片焕发新生。 前期准备 本文会使用到Inpaint Anyt…

密码学及其应用——专用名词(法语版)

1. 密码学概念 1. cryptographie - 密码学 2. cryptosystme - 密码系统 3. cryptographie symtrique - 对称密码学 4. cryptographie asymtrique - 非对称密码学 5. cryptographie quantique - 量子密码学 6. stganographie - 隐写术 2. 加密与解密 1. cryptage - 加密 2. dc…

如何优化Spring Boot应用的启动时间

如何优化Spring Boot应用的启动时间 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将讨论如何优化Spring Boot应用的启动时间&#xff0c;提升应用的性…

代码随想录算法训练营第六天|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

打卡Day6 1.哈希表理论基础2.242.有效的字母异位词2.349. 两个数组的交集3.202. 快乐数4.1. 两数之和 1.哈希表理论基础 文档讲解&#xff1a; 代码随想录 当遇到要快速判断一个元素是否出现在集合中时&#xff0c;要考虑哈希法。但是哈希法牺牲了空间换取了时间&#xff0c;…