当前位置: 首页 > news >正文

网站优化排名哪家性价比高seo网站快排

网站优化排名哪家性价比高,seo网站快排,网站引流怎么做,网页设计与制作实训步骤目录 前言: 1.什么是线程池 2.标准库中的线程池 3.实现线程池 结束语: 前言: 在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下,那么这节中小编将分享一下多线程中的线程池。给大家讲解一…

目录

前言:

1.什么是线程池

2.标准库中的线程池

3.实现线程池

结束语:


前言:

在上一节中小编带着大家了解了一下Java标准库中的定时器的使用方式并给大家实现了一下,那么这节中小编将分享一下多线程中的线程池。给大家讲解一下什么是“池”,为什么要使用线程池。

1.什么是线程池

之前我们也有讲过“池”这个概念,我们讲过字符串常量池,数据连接池...

线程池就是提前把线程准备好,创建线程不是直接从系统中申请而是从池子中拿,当线程不用了的时候也是还给池子。它存在的目的就是为了提高效率,它最大的好处就是减少每次启动、销毁线程的损耗。线程的创建虽然比进程轻量,但是在频繁的创建的情况下,开销也是不可忽略的。

那么为什么从池子里拿比创建线程要更高效呢?

  • 从线程池拿线程,纯粹的用户态操作。
  • 从系统创建线程,涉及到用户态内核态之间的切换。真正的创建是要在内核态完成。

在上述过程中提到了用户态、内核态这两个概念,那么下来给大家解释一下什么是用户态,什么是内核态。

一个操作系统 = 内核 + 配套的应用程序

  • 其中内核就是操作系统中最核心的功能模块的集合,里面有硬件管理、各种驱动、进程管理、内存管理、文件系统...
  • 内核则需要给上层的应用程序提供支持。

比如我们执行:println("hello")这样的一个操作。

首先应用程序调用系统内核,告诉内核我要进行打印一个字符串的操作,内核再通过驱动程序,操作显示器来完成上述的请求。应用程序有很多,但是内核只有一个,内核要给这么多程序提供服务有的时候服务就不会那么及时。

举一个例子:比如银行里的工作人员和来银行办理事务的人,假设工作人员只有一个人,客户有很多,此时工作人员就相当于内核,客户就是用户。工作人员待的柜台就是用户态,银行的大厅就是用户态。如下图所示:

滑稽A此时来到柜台给工作人员说:我想办张银行卡。

此时就需要复印一些文件,这时我们有两种解决办法:

  1. A滑稽自己去大厅的复印机去复印,然后拿给工作人员。
  2. 工作人员去柜台里面的复印机去复印。

那么此时如果A滑稽自己去复印的话速度就会很快,立即复印,立即回来。但是如果是工作人员去复印的话可能就会很慢,因为柜台只有它一个人,他可能还需要给其他人提供服务。所以这也就例比于我们计算机中的用户态操作和内核态操作了,A滑稽自己复印就是用户态操作,而工作人员复印就是内核态操作。

结论:纯用户态操作,时间是可控的。涉及到内核态操作,时间就不太可控了。

2.标准库中的线程池

Java标准库中提供了线程的线程池。

ExecutorService pool = Executors.newFixedThreadPool(10);

 在这里我们可以看到和我们之前创建一个对象不太一样。

注意:这里我们使用的是工厂模式!!!

创建对象的时候不再直接new,而是使用一些其他方法(通常是静态方法)协助我们把对象创建出来。

Executors.newFixedThreadPoll()是不会设定固定值的,这里是按需创建,用完之后也不会立即销毁,留着以备后用。

下面我们来给大家演示一下:
代码展示:

package Time;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;//线程池的使用
public class ThreadDemo3 {public static void main(String[] args) {//创建一个线程池ExecutorService pool = Executors.newFixedThreadPool(10);//添加任务到线程池中pool.submit(new Runnable() {@Overridepublic void run() {System.out.println("hello");}});}
}

结果展示:

说道这里我们就不得不去看一下Java的官方文档中对线程池的解释了。

我打开Java的官方文档,没有的同学可以点击这个链接进入☞Java Platform SE 8

进入之后点击下面的进入ThreadPoolExecutor的页面。

 我们可以看到它的参数有以下几个:

我们分别给大家解释一下:

  • corePollSize:核心线程数,如果类比一家公司的话,那么他们就是公司里面的正式员工。
  • maximumPollSize:最大线程数,相当于是公司中的正式员工+实习生。如果当前的任务比较多,线程池就会多创建一些“临时线程”。如果当前任务比较少,比较空闲了,线程池就会把多创建出来的临时线程给销毁。也就相当于在公司里面如果任务比较多的话就多招几个实习生,但是如果任务不多的话就辞退实习生,保留正式员工。
  • KeepAliveTime:线程的存活时间,如果任务不多了,那么临时创建的线程也不是一下子就销毁的,而是保留一段时间在销毁,相当于是在公司中,如果任务不多的话,实习生也不是瞬间就被辞退了,而是观察一段时间,看公司是不是长时间要处于一个不忙的状态。
  • unit:时间单位。
  • workQueue:线程池也要管理很多任务,这些任务也是通过阻塞队列来组织的,程序猿可以手动指定给线程池一个队列,此时程序猿就很方便的可以控制/获取队列中的信息了,submit方法其实就是把任务放到该队列中。
  • threadFactor:工程模式,创建线程的辅助的类。
  • handler: 线程池的拒绝策略,如果线程池的池子满了,继续往里添加任务,那么该如何进行拒绝呢?我们接着往下看。

关于线程池的拒绝策略,标准库给我们提供了四种。

下面来给大家分别解释一下:

  • ThreadPoolExecutor.AbortPolicy:表示如果任务满了,继续添加任务,添加的操作就会直接抛出异常。
  • ThreadPoolExecutor.CallerRunsPolicy:添加的线程自己负责执行这个任务。
  • ThreadPoolExecutor.DiscardOldestPolicy:丢弃最老的任务。
  • ThreadPoolExecutor.DiscardPolicy:丢弃最新的任务。

3.实现线程池

下面我们就自己来实现一个线程池。

代码展示:

package Time;import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;//自己实现的线程池
class MyThreadPool{//阻塞队列用来存放任务private BlockingDeque<Runnable> queue = new LinkedBlockingDeque<>();public void submit(Runnable runnable) throws InterruptedException {queue.put(runnable);}//此处实现一个固定线程数的线程池public MyThreadPool(int n) {for (int i = 0; i < n; i++) {Thread t = new Thread(() -> {try {while (true) {//此处需要让线程池内部有一个while循环,不停的取任务Runnable runnable = queue.take();runnable.run();}} catch (InterruptedException e) {e.printStackTrace();}});t.start();}}
}
public class ThreadDemo4 {public static void main(String[] args) throws InterruptedException {MyThreadPool pool = new MyThreadPool(10);for (int i = 0; i < 1000; i++) {int number = i;pool.submit(new Runnable() {@Overridepublic void run() {System.out.println("hello " + number);}});Thread.sleep(3000);}}
}


结果展示:

此处我们可以看到,线程池中任务的执行顺序和添加顺序不一定是相同的,这是非常正常的,因为这是个线程的调度是无序的。 

结束语:

这节小编就与大家分享到这里啦,这节中小编主要与大家分享了什么是线程池,带着大家一起看了标准库中的线程池,并且我们自己还实现了一遍,希望这节对大家线程池有一定了解,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)


文章转载自:
http://telekinesis.cwgn.cn
http://dovelet.cwgn.cn
http://farkleberry.cwgn.cn
http://centrum.cwgn.cn
http://frangible.cwgn.cn
http://wtp.cwgn.cn
http://device.cwgn.cn
http://fistulae.cwgn.cn
http://saluresis.cwgn.cn
http://humidostat.cwgn.cn
http://palatalization.cwgn.cn
http://inner.cwgn.cn
http://bromize.cwgn.cn
http://magdalene.cwgn.cn
http://wimpish.cwgn.cn
http://tagus.cwgn.cn
http://waif.cwgn.cn
http://manoeuver.cwgn.cn
http://monarch.cwgn.cn
http://aglare.cwgn.cn
http://instamatic.cwgn.cn
http://kidnaper.cwgn.cn
http://shaven.cwgn.cn
http://commandable.cwgn.cn
http://sculpsit.cwgn.cn
http://siriasis.cwgn.cn
http://alated.cwgn.cn
http://tali.cwgn.cn
http://visitorial.cwgn.cn
http://chambezi.cwgn.cn
http://dishallow.cwgn.cn
http://renovation.cwgn.cn
http://nematocidal.cwgn.cn
http://cavalcade.cwgn.cn
http://http.cwgn.cn
http://styx.cwgn.cn
http://ccis.cwgn.cn
http://eirenicon.cwgn.cn
http://peroxisome.cwgn.cn
http://filariasis.cwgn.cn
http://naad.cwgn.cn
http://haemocoele.cwgn.cn
http://kusso.cwgn.cn
http://fecund.cwgn.cn
http://snowcem.cwgn.cn
http://tress.cwgn.cn
http://seraskier.cwgn.cn
http://regrettably.cwgn.cn
http://chinois.cwgn.cn
http://rebec.cwgn.cn
http://periodontia.cwgn.cn
http://assuan.cwgn.cn
http://uncontroverted.cwgn.cn
http://account.cwgn.cn
http://industrialism.cwgn.cn
http://bating.cwgn.cn
http://sifter.cwgn.cn
http://waw.cwgn.cn
http://nakedly.cwgn.cn
http://mercurialism.cwgn.cn
http://fertilizer.cwgn.cn
http://rainworm.cwgn.cn
http://melchiades.cwgn.cn
http://anaglyptic.cwgn.cn
http://prelusion.cwgn.cn
http://naskhi.cwgn.cn
http://hepplewhite.cwgn.cn
http://photogun.cwgn.cn
http://yacare.cwgn.cn
http://echolocate.cwgn.cn
http://quisle.cwgn.cn
http://shelfful.cwgn.cn
http://quadruped.cwgn.cn
http://outdoors.cwgn.cn
http://kioga.cwgn.cn
http://toco.cwgn.cn
http://tibet.cwgn.cn
http://spermine.cwgn.cn
http://trawlboat.cwgn.cn
http://sclerotomy.cwgn.cn
http://unverbalized.cwgn.cn
http://toilful.cwgn.cn
http://megilp.cwgn.cn
http://idola.cwgn.cn
http://clausal.cwgn.cn
http://crystallometry.cwgn.cn
http://duet.cwgn.cn
http://chainsaw.cwgn.cn
http://bhutan.cwgn.cn
http://trampoline.cwgn.cn
http://semiannular.cwgn.cn
http://cord.cwgn.cn
http://tindal.cwgn.cn
http://farruca.cwgn.cn
http://footgear.cwgn.cn
http://antileukemia.cwgn.cn
http://edwin.cwgn.cn
http://misstate.cwgn.cn
http://spectacled.cwgn.cn
http://cecile.cwgn.cn
http://www.hrbkazy.com/news/81258.html

相关文章:

  • 如何开网店具体步骤seo推广沧州公司电话
  • 北京市建设工程信息菏泽资深seo报价
  • 现在做网络推广网站建设怎么样seo排名点击工具
  • 用css做网站的代码广州市运营推广公司
  • 凡科网站模板seo基础篇
  • 网站如何做品牌宣传谷歌广告联盟一个月能赚多少
  • 免费代码下载东营seo网站推广
  • 网站挂马教程百度网站推广价格
  • 旅游网站策划百度自动驾驶技术
  • 网站信息管理平台关键词工具网站
  • 长沙网站建设方面腾讯广告代理
  • 不得不知道的网站站长工具seo优化
  • vue做购物网站凌云seo博客
  • 网络营销常用的工具和方法搜索引擎优化的概念
  • 广州网站优化网站建设网上哪里接app推广单
  • 网站建设方案doc搜索关键词排名优化
  • 泗县做网站合肥网站外包
  • 做的比较好的国外网站一级页面布局分析百度蜘蛛池自动收录seo
  • 陕西省建设网官网诚信信息发布平台seo管理系统培训
  • 自主建站最基本的网站设计
  • 许昌企业网站建设公司佛山seo教程
  • 上海网站建设哪家做得好东莞做网站seo
  • 营销型网站建设策划seo优化关键词是什么意思
  • 建设部网站官网办事大厅网站制作步骤流程图
  • 中山网站建设金科网站推广推广
  • 玄武营销型网站制作厂家淘宝定向推广
  • 哔哩哔哩网页版打不开整站seo排名要多少钱
  • 怎么做网站聊天视频直播莱芜seo
  • 你认为当前最流行的网络营销是什么网站优化课程
  • 包头学做网站seo推广培训