一次性说清楚 JAVA的 ThreadPoolExecutor 、newFixedThreadPool 和newCachedThreadPool 等
目录
1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么?
2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗,比如线程大小,线程等待时间 等等
3、newCachedThreadPool 与 ThreadPoolExecutor 是什么关系?
4、newFixedThreadPool 与 ThreadPoolExecutor 是什么关系?
5、通过自定义 ThreadPoolExecutor 类可以实现更多的灵活性。
6、newCachedThreadPool 当队列已满时,新的任务需要等待其他任务被取走后才能被添加,这就导致了阻塞 为什么会造成堵塞?
7、ExecutorService 与 ThreadPoolExecutor 有什么区别?
8、ExecutorService还提供了一些工厂方法,除了newFixedThreadPool()和 newCachedThreadPool() 还有其他哪些?
1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么?
Executors.newCachedThreadPool()
和Executors.newFixedThreadPool(2)
都是创建线程池的工厂方法,但它们之间有几个重要的区别。
- 线程池大小
newCachedThreadPool()
创建一个可缓存的线程池,线程池的大小根据需要自动调整,可以创建任意数量的线程。当需要执行任务时,线程池中没有可用线程时,它会创建新的线程来执行任务。如果线程池中的线程在60秒内没有被使用,则会被终止并从池中移除。因此,该方法适合执行大量短时间的任务。
newFixedThreadPool(n)
创建一个固定大小的线程池,该线程池的大小为n。如果有更多的任务提交到线程池中,它们将会被放置在一个队列中等待执行,直到有可用的线程。如果队列已满,则会阻塞新任务的提交。因此,该方法适合执行长时间的任务或需要控制并发数的场景。
- 线程池的使用
newCachedThreadPool()
适用于短期异步任务的执行,例如处理用户请求或发送电子邮件。由于它可以自动调整线程池的大小,因此它可以根据任务的数量动态分配系统资源。但是,由于它会创建大量的线程,因此如果长时间运行,可能会消耗过多的内存和处理器资源。
newFixedThreadPool(n)
适用于长期执行的任务,例如服务器进程。由于它可以限制并发数,因此可以控制系统资源的使用。但是,如果任务数量过多,将可能导致队列阻塞和性能下降。
总之,选择使用newCachedThreadPool()
或newFixedThreadPool(n)
取决于应用程序的需求和特点,需要根据实际情况进行选择。
2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗,比如线程大小,线程等待时间 等等
Executors.newCachedThreadPool()
和Executors.newFixedThreadPool(n)
方法都允许通过传递不同的参数来进行调整。具体来说,可以通过以下方式进行调参:
newCachedThreadPool()
方法允许通过ThreadPoolExecutor
构造函数传递参数来自定义线程池的配置,例如设置线程池的最小和最大线程数,线程的存活时间等等。示例代码如下:
ExecutorService executorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()
);
newFixedThreadPool(n)
方法允许通过ThreadPoolExecutor
构造函数传递参数来自定义线程池的配置,例如设置线程池的最大线程数,队列的容量等等。示例代码如下:
ExecutorService executorService = new ThreadPoolExecutor(n, n, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()
);
通过使用ThreadPoolExecutor
构造函数,我们可以在不同的场景中配置线程池的大小、等待时间、队列容量等,以满足应用程序的需求。需要注意的是,这些参数需要根据具体的场景进行设置,不当的设置可能会导致性能问题。
小小总结一下:
newCachedThreadPool()
方法实际上返回一个 ExecutorService
对象,其内部实现就是基于 ThreadPoolExecutor
的。而且,newCachedThreadPool()
方法中默认的配置与上述代码中的配置是相似的,只是一些参数被设置为默认值了。可以看到,在 ThreadPoolExecutor
的构造函数中,第一个参数是 corePoolSize
,它的值为0,这表示线程池的核心线程数为0,而且线程数可以增加到 Integer.MAX_VALUE
,这与 newCachedThreadPool()
方法中的默认配置一致。同时,线程的存活时间也被设置为60秒,用于控制非核心线程的存活时间。因此,我们可以说,newCachedThreadPool()
方法就是通过 ThreadPoolExecutor
来实现的,并且在默认情况下与上述代码的配置是相似的。newFixedThreadPool(n)也是同样的道理。
3、newCachedThreadPool 与 ThreadPoolExecutor 是什么关系?
newCachedThreadPool
实际上是 ThreadPoolExecutor
的一个快捷创建方式,它使用了默认的配置参数,创建了一个核心线程数为 0,最大线程数为 Integer.MAX_VALUE
,线程空闲时间为 60 秒的线程池。因此,newCachedThreadPool
实际上是调用了 ThreadPoolExecutor
的构造函数,传入了上述默认参数,返回一个 ThreadPoolExecutor
对象。
如果需要更细粒度地控制线程池的参数,例如修改线程数、线程空闲时间等等,就需要直接使用 ThreadPoolExecutor
来创建线程池,并通过构造函数或者 setter 方法来设置参数。
4、newFixedThreadPool 与 ThreadPoolExecutor 是什么关系?
newFixedThreadPool
实际上是 ThreadPoolExecutor
的另一个快捷创建方式,它创建了一个固定大小的线程池,其中核心线程数和最大线程数均为指定的线程数,线程空闲时间为 0 秒,等待队列为无界队列(LinkedBlockingQueue
)。因此,newFixedThreadPool
实际上是调用了 ThreadPoolExecutor
的构造函数,传入了上述参数,返回一个 ThreadPoolExecutor
对象。
同样地,如果需要更细粒度地控制线程池的参数,例如修改线程数、线程空闲时间、等待队列类型等等,就需要直接使用 ThreadPoolExecutor
来创建线程池,并通过构造函数或者 setter 方法来设置参数。
5、通过自定义 ThreadPoolExecutor
类可以实现更多的灵活性。
演示如何使用自定义的 ThreadPoolExecutor
类来实现一个线程池,该线程池具有如下特点:
- 线程池中的线程数在 1 到 5 之间进行动态调整;
- 如果线程池中的线程数少于 5 个,则新任务将会创建新的线程来执行;
- 如果线程池中的线程数大于等于 5 个,且队列未满,则新任务将会加入到队列中等待执行;
- 如果队列已满,则新任务将会被拒绝,并抛出
RejectedExecutionException
异常。
public class CustomThreadPoolExecutor extends ThreadPoolExecutor {public CustomThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);}@Overrideprotected void beforeExecute(Thread t, Runnable r) {super.beforeExecute(t, r);}@Overrideprotected void afterExecute(Runnable r, Throwable t) {super.afterExecute(r, t);}@Overrideprotected void terminated() {super.terminated();}@Overridepublic void execute(Runnable command) {if (getPoolSize() < 5) {// 如果线程池中的线程数少于 5 个,则创建新的线程来执行任务super.execute(command);} else {// 如果线程池中的线程数大于等于 5 个,且队列未满,则加入到队列中等待执行boolean added = false;try {added = getQueue().offer(command, 1, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();}if (!added) {// 如果队列已满,则拒绝新任务,并抛出 RejectedExecutionException 异常throw new RejectedExecutionException();}}}public static void main(String[] args) {// 创建一个初始大小为 1,最大大小为 5,队列大小为 10 的线程池CustomThreadPoolExecutor executor = new CustomThreadPoolExecutor(1, 5, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));// 提交 10 个任务for (int i = 1; i <= 10; i++) {final int taskId = i;executor.execute(() -> {try {System.out.println("开始执行任务:" + taskId);Thread.sleep(2000);System.out.println("任务执行完成:" + taskId);} catch (InterruptedException e) {e.printStackTrace();}});}// 关闭线程池executor.shutdown();}
}
在上面的例子中,我们继承了 ThreadPoolExecutor
类,并重写了其中的 execute
方法。在 execute
方法中,我们实现了上述的特性:
- 如果线程池中的线线程数少于 5 个,则创建新的线程来执行任务;
- 如果线程池中的线程数达到了 5 个,则将任务放入队列中等待执行;
- 如果队列已满,则创建新的线程来执行任务,直到线程数达到了最大值 10;
- 如果线程池中的线程数达到了最大值 10,则将任务交给拒绝策略来处理。可以将这种策略称为“先创建线程,然后进入队列",
- 最后触发拒绝策略”的策略。在这种策略下,可以根据实际情况合理设置线程池的参数,从而达到更好的效果。
6、newCachedThreadPool 当队列已满时,新的任务需要等待其他任务被取走后才能被添加,这就导致了阻塞 为什么会造成堵塞?
当队列已满时,新的任务就无法被立即执行,只能等待队列中的任务被消费后才能被添加,因此就会产生阻塞。具体来说,如果线程池中的线程数量已经达到了指定的数量,而队列中的任务数量又达到了队列的容量上限,此时新的任务就无法被执行,只能等待其他任务被执行完毕并从队列中移除,才能继续执行。如果这种情况持续发生,就会导致整个线程池的性能下降,甚至导致系统崩溃。
因此,在使用有界队列的线程池时,需要根据实际情况来设置队列容量和线程数量,避免出现阻塞的情况。
当任务队列被堵塞,新的任务无法执行,就会导致线程池的工作效率下降,任务的等待时间变长,从而影响了线程池的响应速度。如果这种情况持续发生,就会导致整个系统的性能下降,包括 CPU、内存、I/O 等方面。
举个例子,如果线程池中的线程数过多,会占用过多的CPU资源,导致其他进程无法正常运行;如果任务队列的大小设置过小,会导致频繁的线程创建和销毁,消耗大量内存资源;如果任务涉及I/O操作,过多的线程可能会造成I/O阻塞,影响整体性能。因此,在使用线程池的过程中,需要综合考虑各种因素,调整参数,以达到最佳的性能表现。
7、ExecutorService 与 ThreadPoolExecutor 有什么区别?
ExecutorService
和ThreadPoolExecutor
都是Java中用于管理线程池的类,但它们有一些不同点。
ExecutorService
是一个接口,它定义了提交任务、执行任务和关闭线程池等方法,具体的实现由ThreadPoolExecutor
等类来完成。在使用ExecutorService
时,用户只需关注接口中定义的方法,而无需关注底层的实现细节。
ThreadPoolExecutor
则是一个具体的线程池实现类,它实现了ExecutorService
接口。除了实现ExecutorService
中定义的方法外,ThreadPoolExecutor
还提供了一些额外的功能,例如线程池中任务的拒绝策略、线程池中空闲线程的存活时间等。
因此,可以认为ExecutorService
是一个线程池的抽象,而ThreadPoolExecutor
是一个线程池的具体实现。
另外,ExecutorService
还提供了一些工厂方法,例如newFixedThreadPool()
和newCachedThreadPool()
等,这些方法会根据用户的需求创建不同类型的线程池,使得用户可以更方便地使用线程池,而无需关注底层的实现细节。
8、ExecutorService还提供了一些工厂方法,除了newFixedThreadPool()和 newCachedThreadPool() 还有其他哪些?
除了 newFixedThreadPool()
和 newCachedThreadPool()
方法之外,ExecutorService
接口还提供了以下几个工厂方法:
-
newSingleThreadExecutor()
:返回一个只有一个线程的线程池。如果该线程异常终止,会创建一个新的线程来替代它。 -
newScheduledThreadPool(int corePoolSize)
:返回一个定时执行任务的线程池。它的核心线程数为corePoolSize
,可以执行定时任务,周期性任务等。 -
newWorkStealingPool()
:返回一个根据当前处理器数量创建并行线程的线程池。该线程池使用工作窃取算法来提高CPU利用率。
这些方法都是通过 ThreadPoolExecutor
实现的,提供了一些默认的配置,使得用户可以方便地创建不同类型的线程池。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
一次性说清楚 JAVA的 ThreadPoolExecutor 、newFixedThreadPool 和newCachedThreadPool 等
目录 1、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 的区别是什么? 2、Executors.newCachedThreadPool() 与 Executors.newFixedThreadPool(n) 可以调参吗,比如线程大小,线程等待时间 等等 3、newCachedThreadP…...
![](https://img-blog.csdnimg.cn/132861d6b5fd489f9e35ea7926eb5857.gif)
Android双目三维重建:Android双目摄像头实现双目测距
Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建:Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…...
![](https://img-blog.csdnimg.cn/fed9a1ebafec4fd59c1e438719055d31.png)
解决Avoid using non-primitive value as key, use string/number value instead.
Avoid using non-primitive value as key, use string/number value instead. 意思是:避免使用非基本值作为键,而是使用字符串/数字值。 Duplicate keys detected: [object Object]. This may cause an update error. 意思是:检测到重复键:[o…...
![](https://img-blog.csdnimg.cn/82b01b6d395c40878507016755fb1db6.jpeg)
重构·改善既有代码的设计.03之重构手法(上)
1. 前言 之前的重构系列中,介绍了书中提到的重构基础,以及识别代码的坏味道。今天继续第三更,讲述那些重构手法(上)。看看哪些手法对你的项目能有所帮助… 2. 重新组织函数 对函数进行整理,使之更恰当的…...
![](https://img-blog.csdnimg.cn/50c0c47cb3ea4f8a9f9ad8b764925057.png)
闭关修炼(0.0 pytorch基础学习)1
基于官网pytorch.org pytorch 动态 比较优秀 py3.7支持是最多的啦 原来anaconda 是蟒蛇的意思 细思极恐 python 是蛇 yi Introduction to PyTorch Tensors — PyTorch Tutorials 2.0.0cu117 documentation omygaga 英语极差 哈哈哈 tensor 多维数组 矩阵二维数组 Tensor…...
![](https://img-blog.csdnimg.cn/4ede4545436740aba91eeaf3193abfe6.png)
个人-计算机操作系统第一章
一、章节习题 1.操作系统的目标与应用环境有关,如分时系统,希望能提供良好的()能力。 A、批处理B、可靠性C、稳定性D、人-机交互 2.()是应用程序取得OS所有服务的唯一途径。 A、系统调用B、作业调度C、键…...
![](https://www.ngui.cc/images/no-images.jpg)
Python-责任链模式
介绍 责任链模式是一种行为型设计模式,它允许多个对象以链式的形式依次处理请求,直到请求被处理或者无处理对象为止 实现方式 责任链模式由多个处理器组成,每个处理器都可以处理一种请求。如果当前处理器无法处理请求,它将把请…...
![](https://img-blog.csdnimg.cn/7cf18a7314cb4d88a0ec55cfc2143d44.png)
HIT 计统实验2 二进制炸弹(gdb破解版) 拆弹过程
CSAPP 实验2是一个很好玩的实验,网上有很多参考资源写的都很好,本文增加了一些具体细节。 想要我的炸弹可以私信我。 还得看形式语言 , 炸弹6 7 有时间再拆 第1章 实验基本信息 1.1 实验目的 熟练掌握计算机系统的ISA指令系统与寻址方式熟练掌握Linu…...
![](https://img-blog.csdnimg.cn/0c9a604a8b604ccfa909dfcb43cd6a20.png)
echart 半环渐变仪表盘
实现效果如图: op配置项代码: let Chart this.$echarts.init(document.getElementById(dashboard-1));let option {// backgroundColor: #040d2e,series: [// 中间灰色轴线{type: gauge,radius: 150%, // 位置center: [50%, 90%],startAngle: 180,end…...
![](https://img-blog.csdnimg.cn/img_convert/39d10506f56b4af0386795b69caff59e.png)
【springboot】自动加载分析
文章目录问题SpringBootApplication注解AutoConfigurationPackages.Registrar类AutoConfigurationImportSelector类springboot如何加载其他的starter总结问题 为什么我们在使用springboot的时候,只需要在maven中导入starter就能够使用呢?这里来分析一下…...
![](https://img-blog.csdnimg.cn/img_convert/1e8a4b9380f47b516f4f6df206408ad7.png)
ChatGPT批量翻译-ChatGPT批量生成多国语言
ChatGPT翻译的准吗 ChatGPT是一种基于Transformer架构的自然语言处理技术,其翻译准确性取决于所训练的模型和数据集的质量。在特定的语料库和训练数据下,ChatGPT可以实现一定程度的准确翻译。但是,与人工翻译相比,ChatGPT的翻译质…...
![](https://img-blog.csdnimg.cn/767a4f9e043844ca941ec23f433c6a4a.png)
Symble
ES6引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。 Symbol特点 Symbol 的值是唯一的,用来解决命名冲突的问题 Symbol值不能与其他数据进行运算 Symbol定义的对…...
![](https://img-blog.csdnimg.cn/img_convert/065ebd7c63dbd859419b5d22cffaa6cb.jpeg)
能在家里赚钱的工作有哪些?适合普通人的兼职项目
当下对于普通人而言,想在社会上找到一份舒心安逸的工作很难,特别是在薪酬待遇这方面,更是低得让人心寒。那么,如果能有一份在家就可以做的事情,而且是收入也不少,那将是很多普通人的最佳选择。在这里&#…...
![](https://www.ngui.cc/images/no-images.jpg)
创建SaaS产品帮助中心的关键步骤
帮助中心是一款SaaS产品必不可少的一部分,为了帮助用户更好的解决产品相关问题,提高新用户的使用体验,并且引导用户更好的使用产品,那么应该怎样制作帮助中心呢,每个产品帮助中心都需要有自己的风格,根据产…...
![](https://img-blog.csdnimg.cn/131b528a56d84b6390c6cffccf80e3e8.png)
高频算法:Leetcode53 最大子数组和
今天讲的是Leetcode第53题,最大子数组和 首先观察题目,题目需要我们找出具有最大和的连续子数组,直接拿题目中的示例来做一个演示,找一找什么规律下的连续子数组才能得到最大的和 先从-2开始,-2 1 -1 此时我们的和…...
![](https://img-blog.csdnimg.cn/004e2c87071f4c99bc37de2fab6d6584.jpeg)
如何编写接口自动化测试框架、
编写接口自动化测试框架需要注意以下几点: 接口选择:首先确定需要测试的接口,包括请求方式、URL、参数、返回值等信息。 框架设计:设计一个灵活的框架,可以根据接口类型(RESTful API、SOAP API等ÿ…...
![](https://img-blog.csdnimg.cn/f2a50a77f25b41f788539d71d0ec87f3.png)
【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17
大家好,我是陶然同学,软件工程大三即将实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…...
![](https://img-blog.csdnimg.cn/c059c495a2024a77b7f6611b6933e886.png)
ESP32开发(1)----Espressif-IDE开发环境配置
Espressif-IDE开发环境配置前言一、ESP32-WROOM-32介绍二、IDE环境搭建三、建立第一个项目总结前言 最近得到一块ESP32-WROOM-32的开发板,没有原理图,但板子走线比较简单,看着板子上的布线大致猜一猜连接,然后试玩了一下…...
![](https://img-blog.csdnimg.cn/8cad93ebcd414dd79ca98ac2ab8631a9.png)
MyBatisPlus标准数据层开发
MyBatisPlus标准数据层开发2,标准数据层开发2.1 标准CRUD使用2.2 新增2.3 删除2.4 修改2.5 根据ID查询2.6 查询所有2.7 Lombok概念使用步骤步骤1:添加lombok依赖步骤2:安装Lombok的插件步骤3:模型类上添加注解2.8 分页功能步骤1:调用方法传入参数获取返回值步骤2:设…...
![](https://img-blog.csdnimg.cn/485e23fe171340ac8aa6484295c452bf.png)
C/C++每日一练(20230412)
目录 1. 二维数组找最值 🌟🌟 2. 排序 🌟 3. 二叉树展开为链表 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 二维…...
![](https://img-blog.csdnimg.cn/2199f0a8690c45a98ea7c47b184920a8.png)
Leetcode.1379 找出克隆二叉树中的相同节点
题目链接 Leetcode.1379 找出克隆二叉树中的相同节点 easy 题目描述 给你两棵二叉树,原始树 original和克隆树 cloned,以及一个位于原始树 original中的目标节点 target。 其中,克隆树 cloned是原始树 original的一个 副本 。 请找出在树 …...
![](https://www.ngui.cc/images/no-images.jpg)
2022年团体程序设计天梯赛-总决赛
目录 一、L1-1 今天我要赢 二、L1-2 种钻石 三、L1-3 谁能进图书馆 四、L1-4 拯救外星人 五、L1-5 试试手气 六、L1-6 斯德哥尔摩火车上的题 七、L1-7 机工士姆斯塔迪奥 八、L1-8 静静的推荐 九、L2-1 插松枝 十、L2-2 老板的作息表 十一、L2-3 龙龙送外卖 十二、L…...
![](https://img-blog.csdnimg.cn/img_convert/c4f14f12e16f11aa4f83ad25ab72f3f9.png)
大数据技术之Sqoop——SQL to Hadoop
一、简介sqoop (sql to hadoop)是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MSQL,Oracle,Post…...
![](https://www.ngui.cc/images/no-images.jpg)
Java议题
序号议题 解释MyBatis官网1mapper文件中什么时候使用 # 什么时候必须用 $ 1、关键字作为参数,使用"$",两边不加""。 2、非关键字作为参数,使用"#"防注入。 其他情况优先使用"#" 2主键回填࿰…...
![](https://img-blog.csdnimg.cn/d9b446fa0fbf4f06aef94899edb9e2ea.png)
【阅读论文】USAD:多变量时间序列上的无监督异常检测
USAD : UnSupervised Anomaly Detection on Multivariate Time Series 摘要 IT系统的自动监控是Orange目前面临的挑战。考虑到其IT运营所达到的规模和复杂性,随着时间的推移,用于推断正常和异常行为的测量所需的传感器数量急剧增加,使得传统…...
![](https://www.ngui.cc/images/no-images.jpg)
Java多线程:ReentrantLock中的方法
公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一…...
![](https://img-blog.csdnimg.cn/1ca98012e7874b76bace60c115db1052.png)
RabbitMQ初识快速入门
RabbitMQ初识&快速入门1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯1.2.技术对比:2.快速入门2.1.安装RabbitMQ2.1.1 下载镜像2.1.2 安装MQ2.2.RabbitMQ消息模型2.3.导入Demo工程2.4.入门案例2.4.1.publisher实现2.4.2.consumer实现2.5.总结1.初识MQ…...
![](https://img-blog.csdnimg.cn/c7e69890c893422e8f72bbf29263212f.png)
由浅入深了解HashMap源码
由经典面试题引入,讲解一下HashMap的底层数据结构?这个面试题你当然可以只答,HashMap底层的数据结构是由(数组链表红黑树)实现的,但是显然面试官不太满意这个答案,毕竟这里有一个坑需要你去填&a…...
![](https://img-blog.csdnimg.cn/img_convert/6281ee26796febb36ae5c3114915e435.png)
P5318 【深基18.例3】查找文献
题目描述 小K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章。小K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献(如果他之前已经看过这篇参考…...
![](https://www.ngui.cc/images/no-images.jpg)
Error caught was: No module named ‘triton‘
虽然报错但是不影响程序运行: A matching Triton is not available, some optimizations will not be enabled. Error caught was: No module named triton解决: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple triton2.0.0.dev20221120...
![](https://img-blog.csdnimg.cn/0dfb0012fc0343c29cee22e5b844f9d9.png)
网站建设资讯版块如何做用户运营/长沙优化科技
解决方法 pycharm配置环境变量: PYTHONUNBUFFERED1;SPARK_HOMEF:\spark-3.3.0-bin-hadoop3;PYSPARK_PYTHONpython 或者配置他们到windows环境变量,然后重启pycharm....
![](/images/no-images.jpg)
网站购物车怎么做/做百度推广的业务员电话
建造者模式用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。用户只需指定要建造的类型就可以得到他们,建造过程及细节不需要知道。 建造者模式的原理和实现比较简单,重点是掌握应用场景,避…...
![](https://img-blog.csdnimg.cn/img_convert/fc6d676855784d135adafb67bc0ba434.png)
wordpress paypal插件/站长工具seo综合查询怎么关闭
我的开发环境是Win8VS2013,数据库环境是MySQL(WampServer)1、下载MySQL Connector/Net 6.8.3地址:http://dev.mysql.com/downloads/connector/net/还需要下载一个MySQL for VisualStudio版本,用于在VS中可以在数据源中引用MySQL地址…...
![](/images/no-images.jpg)
黄村做网站哪家好/有没有免费的seo网站
什么是红色表示用户需要输入或定制的生产线将在红色在本教程! 其余的应该主要是复制和粘贴。关于MySQLMySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将…...
![](/images/no-images.jpg)
做外贸一般用哪些网站好/饥饿营销案例
这两年少儿编程教育如火如荼,科技和政策的推动让家长越来越意识到编程的重要性。随着人工智能的发展和应用深入,编程也慢慢将成为每一个孩子的必备基础技能。但与此同时,也有很多国内家长对少儿编程这个词比较陌生,很多家长对少儿…...
![](/images/no-images.jpg)
关键词和网站的关系/seo主要做什么
使用rpm命令查询软件包: 1、查询系统中安装的所有RPM包 $ rpm -qa 查询当前linux系统中已经安装的软件包。 例:$ rpm -qa | grep -i x11 | head -3 察看系统中包含x11字符串的前3行软件包。 2、查询软件包是否安装 $ rpm –q rpm包名称 察看系统中指定软…...