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

如何查看一个网站做的外链网络营销简介

如何查看一个网站做的外链,网络营销简介,兴义市 网站建设,龙岗网站制作资讯线程池详讲 一、线程池的概述二、线程池三、自定义线程池四、线程池工作流程图五、线程池应用场景 一、线程池的概述 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过…

线程池详讲

  • 一、线程池的概述
  • 二、线程池
  • 三、自定义线程池
  • 四、线程池工作流程图
  • 五、线程池应用场景

一、线程池的概述

线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们所知的实现了 Runnable 或 Callable 接口的实例对象。

线程池的优势:

  1. 线程和任务分离,提升了线程重用性。
  2. 控制线程的并发数量,降低服务器压力,统一管理所有线程。
  3. 提升系统响应速度,假如创建线程用的时间为 T1,执行任务用的时间为 T2,销毁线程用的时间为 T3,那么使用线程池就免去了 T1 和 T3 的时间。

二、线程池

为什么要使用线程池?

  1. 降低资源消耗;通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  2. 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  3. 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。

jdk 自带的四种线程池

Java 通过 Executors 提供了四种线程池,分别是:

  • newCachedThreadPool 创建一个可缓存线程池,如果线程池长度不超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
  • newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超过的线程会在队列中等待。
  • newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
  • newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。

通过 Executors. 上面的静态方法得到的连接池都有一个共同点,就是他们都是去 new ThreadPoolExecutor 然后进行返回。

在这里插入图片描述

接下来对 ThreadPoolExecutor 构造方法的每个操作进行解释:

参数意义
corePoolSize指定了线程池里的线程数量,核心线程池大小(0-Integer.MAX_VALUE)
maximumPoolSize指定了线程池里的最大线程数量(0-Integer.MAX_VALUE)
keepAliveTime当线程池线程数量大于corePoolSize时候,多出来的空闲线程,多长时间会被销毁(0-Integer.MAX_VALUE)
unit时间单位,TimeUnit
workQueue任务队列(阻塞任务队列),用于存放提交但是尚未被执行的任务
threadFactory线程工厂,用于创建线程,线程工厂就是给我们new线程的
handler所谓拒绝策略,是指将任务添加到线程池中时,线程池拒绝该任务所采取的相应策略

常见的工作队列(对应参数5)我们有如下选择,这些阻塞队列,阻塞队列的意思是,当队列中没有值的时候,取值操作会阻塞,一直等队列中产生值。

  • ArrayBlockingQueue:基于数据结构的有界阻塞队列,FIFO。
  • LinkedBlockingQueue:基于链表结构的有界阻塞队列,FIFO。

线程池提供的四种拒绝策略(对应参数7)

  • AbortPolicy:直接抛出异常,默认策略
  • CallerRunsPolicy:用调用者所在线程来执行任务
  • DiscardOldestPolicy:丢弃阻塞队列中最靠前的任务,并执行当前任务。
  • DiscardPolicy:直接丢弃任务。

了解完 ThreadPoolExecutor 构造方法的各个参数之后,来看看 jdk 为我们提供的四个线程池是如何实现的吧:

  • newCachedThreadPool
    public static ExecutorService newCachedThreadPool() {return new ThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());}
来看看其参数:
核心线程池大小为:0
最大线程数支持:Integer.MAX_VALUE
线程过期时间为60s
使用了 SynchronousQueue 作为工作队列。
拒绝策略没有指定,默认是抛出异常。
  • newFixedThreadPool
    public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());}
来看看其参数:核心线程数和最大线程数需咱指定,都是相同的,也就是说不支持缓存线程。没有缓存线程,自然过期时间就是0了。工作队列使用的是 LinkedBlockingQueue拒绝策略没有指定,默认是抛出异常。
  • newScheduledThreadPool
public ScheduledThreadPoolExecutor(int corePoolSize) {super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,new DelayedWorkQueue());
}
核心线程池大小=传入参数
最大线程池大小为Integer.MAX_VALUE
线程过期时间为0ms
DelayedWorkQueue作为工作队列.
  • newSingleThreadExecutor
public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));
}
核心线程池大小=1
最大线程池大小为1
线程过期时间为0ms
LinkedBlockingQueue作为工作队列.

三、自定义线程池

​ 这里是针对JDK1.8版本,使用JDK自带的线程池会出现OOM问题,中小型公司一般很难遇到,在阿里巴巴开发文档上面有明确的标识:

在这里插入图片描述
上面解释了 ThreadPoolExecutor 的构造参数,那现在自己自定义的话其实很简单,本质的话就是自定义 ThreadFactory(实现里面的 newThread 方法即可),如下所示:

    public static void main(String[] args) {AtomicInteger num = new AtomicInteger(0);ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,30,60L, TimeUnit.SECONDS,new ArrayBlockingQueue<>(10),/*Executors.defaultThreadFactory()*/new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);thread.setName("myThread-" + num.getAndIncrement());thread.setDaemon(false);return thread;}},new ThreadPoolExecutor.AbortPolicy());for (int i = 0; i < 100; i++) {threadPoolExecutor.submit(() -> {System.out.println(Thread.currentThread() + "-----------------");});}}

四、线程池工作流程图

在这里插入图片描述

五、线程池应用场景

  1. Tomcat 在处理 Web 请求的时候就用了线程池,我在《Tomcat架构解析》这边书看到的,下面给出书中Tomcat处理 Web 请求的流程图吧(手机不行,拍的不是很轻,感兴趣大家可以买来看看,不错的)。
    请添加图片描述Tomcat 使用的线程池是自定义的。

  2. 在开发通讯系统的时候,我是想用它出来消息的串行问题的,提高效率。

  3. 网购商品秒杀。

  4. 云盘文件上传和下载。

  5. 12306网上购票系统等等。

http://www.ds6.com.cn/news/9615.html

相关文章:

  • 旅游网站制作素材免费seo工具大全
  • 江宁做网站价格一呼百应推广平台
  • 佛山专业网站建设韩国最新新闻
  • 晟合建设集团网站百度站长工具seo查询
  • php 怎么做 网站 图片武汉大学人民医院光谷院区
  • 王健林亏60亿做不成一个网站如何做电商
  • 网站建设代码上传技成培训网
  • 那些免费网站可以做国外贸易做一个公司网站大概要多少钱
  • 深圳航空官网机票预订合肥网站优化公司
  • 网站开发做网站南宁网
  • 网站常见问题是什么关键词分类工具
  • 网站导航如何优化外链seo
  • 即墨网站优化长沙靠谱seo优化
  • 毕业设计网站前端代做南京百度推广优化
  • 门户信息类网站建设360网站推广登录
  • 电脑记事本做复杂网站如何推广自己的业务
  • 山西手机网站建设石家庄网络营销
  • 做网站打广告需要多少个服务器百度搜索如何去广告
  • 上海自动seo百度网站优化工具
  • 深圳杰恩创意设计有限公司网站专业的制作网站开发公司
  • 广州网站建设哪家公司好百度极速版app下载安装挣钱
  • 潍坊做网站价格长沙seo推广公司
  • 电子商务网站建设人才调研google谷歌搜索引擎入口
  • 盐城本地网站建设公司电话百度云网盘网页版登录
  • 国外视频模板网站e谷歌官方app下载
  • 适合大学生做的兼职网站有哪些广东省白云区
  • 成都十大营销策划公司北京百度seo排名公司
  • 网站建设公司哪家好青岛seo
  • 宁波网站的优化网站更新seo
  • 南京市建设工程档案馆网站赣州seo顾问