首先是一个接口,继承了其他接口,开头图里有继承关系。
然后这个接口里有4个方法:
先看前两个 schedule方法,这两个方法的区别是参数不同。一个执行 Runnable,另一个执行Callable,如下图所示:
其次看后两个方法:(给一个全图)
怎么用呢?这是一个接口 ,肯定是要用实现类的:
先看
看一下这个代码的执行顺序,刚进来是初始化一个 Runnable,然后pool调用schedule方法,意思是在3秒后执行这个Runnable。所以代码就走到了while循环,在while循环内打印了3次之后,pool的时间到了,然后就去执行Runnable,但是此时Runnable里面又睡了2秒。所以继续执行while循环,在Runnable睡的2秒之内又打印了2次,接着打印run方法里的代码。
也就是前前后后在while循环内一共打印了5次后,才打印了run里的代码。并且run里的代码只执行一次。
一直打印的 pool中的corePoolSize = 5 是因为 核心线程数是不会变的,除非是可用的线程数。
控制台到最后没有关闭是因为线程池里面还有线程在活跃,如果想控制台关闭,可以while循环外面用pool调用shutdown方法即可
线程池里面的线程执行完了,并不会里面销毁,保持活跃,等待下次的线程任务使用,这就是池化的意义,不用再去新建线程。
剩下的两个方法:看图就好。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
本质是一个线程池,默认的线程数量是cpu的核数
模拟一个网络请求。代码如下图所示:
Java中的线程不是越多越好,线程是Java中的一个对象,而且每个线程都有自己的工作内存, 1、线程创建、销毁需要时间,消耗性能 2、线程过多,会占用很多内存 3、操作系统需要频繁切换线程上下文(线程都想被运行),影响性能 4、如果创建时间+ 销毁时间 > 执行任务时间 就很不合算
所谓线程池,就是一个用来放线程的池子,里面存放着已经创建好的线程,当有任务提交的时候,池子里面的某个线程会执行这个任务,当任务结束后,线程又回到了池子里面等待下一个任务。当任务太多的时候,池子就要自动加水,创建更多的线程,但池子也是有容量的;当任务太少的时候,池子就要放掉一些线程,以免资源浪费。
1. 通过Executors创建线程池的弊端
一、概述 1、问题 先看我们遇到的问题:我们创建线程的方式很简单,new Thread(() -> {...}),就是因为这么简单粗暴的方式,才带来了致命的问题。首先线程的创建和销毁都是很耗时很浪费性能的操作,你用线程为了什么?为了就是异步,为了就是提升性能。简单的new三五个Thread还好,我需要一千个线程呢?你也for循环new1000个Thread吗?用完在销毁掉。那这一千个线程的创建和销毁的性能是很糟糕的!
前言 最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信。考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了。 但是遇到了许多问题,使得@Async无效,也一直没有找到很好的文章去详细的说明@Async的正确及错误的使用方法及需要注意的地方,这里简单整理了一下遇见的问题,Sring是以配置文件的形式来开启@Async,而SpringBoot则是以注解的方式开启。 我们可以使用springBoot默认的线程池,不过一般我们会自定义线程池(因为比较灵活),配置方式有: 使用 xml 文件配置的方式 使用Java代码结合@Configuration进行配置(推荐使用) 下面分别实现两种配置方式
我们在工作中或多或少都使用过线程池,但是为什么要使用线程池呢?从他的名字中我们就应该知道,线程池使用了一种池化技术,和很多其他池化技术一样,都是为了更高效的利用资源,例如链接池,内存池等等。
一、线程池 线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。
阿里作为国内Java使用最多的大厂,他出版了一部《阿里巴巴Java开发手册》,不知道大家看过没,没有看过的话,建议大家看看。 对于我们编程养成良好的习惯还是很有帮助的,最近我在看到并发这一规约的时候,他们就明确了一点:线程池不允许使用 Executors来创建。 在多线程编程中,线程池是一种重要的资源管理工具,用于提高程序效率和降低资源消耗。 Java通过java.util.concurrent包提供了丰富的线程池管理工具,其中Executors类是创建线程池的常用工具。 然而,像阿里巴巴这样的大型技术公司却建议开发者避免使用Executors来创建线程池。为什么会有这样的建议呢?
prtyaa 收益393.62元
zlj141319 收益218元
1843880570 收益214.2元
IT-feng 收益209.03元
风晓 收益208.24元
777 收益172.71元
Fhawking 收益106.6元
信创来了 收益105.84元
克里斯蒂亚诺诺 收益91.08元
技术-小陈 收益79.5元
扫一扫关注公众号
扫一扫加入交流群
加入交流群
请使用微信扫一扫!